oncoprintjs 6.0.0 → 6.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.es.js +17 -2
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +17 -2
- package/dist/index.js.map +1 -1
- package/dist/js/oncoprintmodel.d.ts +3 -0
- package/package.json +2 -2
- package/rules/geneticrules.ts +55 -12
- package/src/js/oncoprintmodel.ts +21 -10
- package/src/js/oncoprinttrackoptionsview.ts +1 -0
package/dist/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../src/js/polyfill.ts","../src/js/binarysearch.ts","../src/js/CachedProperty.ts","../src/js/clustering.ts","../src/js/utils.ts","../src/js/bucketsort.ts","../src/js/precomputedcomparator.ts","../src/js/modelutils.ts","../src/js/oncoprintmodel.ts","../src/js/makesvgelement.ts","../src/js/extractrgba.ts","../src/js/oncoprintshapetosvg.ts","../src/js/svgfactory.ts","../src/js/oncoprintshapetovertexes.ts","../src/js/oncoprintshape.ts","../src/js/shaders.ts","../src/js/oncoprintwebglcellview.ts","../src/js/oncoprintlabelview.ts","../src/js/heatmapcolors.ts","../src/js/oncoprintruleset.ts","../src/img/menudots.svg","../src/js/oncoprintheaderview.ts","../src/js/oncoprinttrackoptionsview.ts","../src/js/oncoprintlegendrenderer.ts","../src/js/oncoprinttooltip.ts","../src/js/oncoprinttrackinfoview.ts","../src/js/oncoprintzoomslider.ts","../src/img/zoomtofit.svg","../src/js/oncoprintminimapview.ts","../src/js/oncoprint.ts"],"sourcesContent":["/*\n * Copyright (c) 2016 Memorial Sloan-Kettering Cancer Center.\n *\n * This library is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS\n * FOR A PARTICULAR PURPOSE. The software and documentation provided hereunder\n * is on an \"as is\" basis, and Memorial Sloan-Kettering Cancer Center has no\n * obligations to provide maintenance, support, updates, enhancements or\n * modifications. In no event shall Memorial Sloan-Kettering Cancer Center be\n * liable to any party for direct, indirect, special, incidental or\n * consequential damages, including lost profits, arising out of the use of this\n * software and its documentation, even if Memorial Sloan-Kettering Cancer\n * Center has been advised of the possibility of such damage.\n */\n\n/*\n * This file is part of cBioPortal.\n *\n * cBioPortal is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport type OMath = Math & { log2: (x: number) => number };\nexport const OMath: OMath = Math as any;\n\nOMath.log2 =\n OMath.log2 ||\n function(x: number) {\n return Math.log(x) / Math.LN2;\n };\n","export default function binarysearch<T>(\n array: T[],\n target_key: number,\n keyFn: (t: T) => number,\n return_closest_lower_if_not_found?: boolean\n) {\n if (!array.length) {\n return -1; // return -1 for an empty array\n }\n var upper_excl = array.length;\n var lower_incl = 0;\n var middle;\n while (lower_incl < upper_excl) {\n middle = Math.floor((upper_excl + lower_incl) / 2);\n var middle_key = keyFn(array[middle]);\n if (middle_key === target_key) {\n return middle;\n } else if (target_key > middle_key) {\n lower_incl = middle + 1;\n } else if (target_key < middle_key) {\n upper_excl = middle;\n } else {\n // make sure we don't infinite loop in case anything's wrong\n //\tso that those three cases don't cover everything\n return -1;\n }\n }\n if (return_closest_lower_if_not_found) {\n return Math.max(0, lower_incl - 1);\n } else {\n return -1;\n }\n}\n","export default class CachedProperty<T> {\n private bound_properties: CachedProperty<any>[] = [];\n\n constructor(private value: T, private updateFn: (...args: any[]) => T) {}\n\n public update(...args: any[]) {\n this.value = this.updateFn.apply(null, args);\n for (let i = 0; i < this.bound_properties.length; i++) {\n this.bound_properties[i].update(...args);\n }\n }\n\n public get() {\n return this.value;\n }\n\n public updateAndGet() {\n this.update();\n return this.get();\n }\n public addBoundProperty(cached_property: CachedProperty<any>) {\n this.bound_properties.push(cached_property);\n }\n}\n","import ClusteringWorker from 'web-worker:./workers/clustering-worker';\nimport {\n CaseItem,\n CasesAndEntities,\n ClusteringMessage,\n EntityItem,\n} from './workers/clustering-worker';\n\n/**\n * Executes the clustering of casesAndEntitites in the requested\n * dimension (CASES or ENTITIES).\n *\n * @param casesAndEntitites: Object with sample(or patient)Id and map\n * of geneticEntity/value pairs. Example:\n *\n * var a =\n * {\n * \"TCGA-AO-AA98-01\":\n * {\n * \t\"TP53\": 0.045,\n * \t\"BRA1\": -0.89\n * }\n * },\n * ...\n *\n * @return a deferred which gets resolved with the clustering result\n * when the clustering is done.\n */\nfunction _hcluster(\n casesAndEntitites: ClusteringMessage['casesAndEntities'],\n dimension: ClusteringMessage['dimension']\n) {\n var worker = new ClusteringWorker();\n var message = new Object() as ClusteringMessage;\n //@ts-ignore\n var def = new $.Deferred();\n message.casesAndEntities = casesAndEntitites;\n message.dimension = dimension;\n worker.postMessage(message);\n worker.onmessage = function(m: any) {\n def.resolve(m.data as CaseItem[] | EntityItem[]);\n };\n return def.promise();\n}\n\n/**\n * Use: cbio.stat.hclusterCases(a);\n\n * @return a deferred which gets resolved with the clustering result\n * when the clustering is done.\n */\nexport function hclusterColumns(\n casesAndEntitites: CasesAndEntities\n): Promise<CaseItem[]> {\n return _hcluster(casesAndEntitites, 'CASES');\n}\n\n/**\n * Use: hclusterGeneticEntities(a);\n *\n * @return a deferred which gets resolved with the clustering result\n * when the clustering is done.\n */\nexport function hclusterTracks(\n casesAndEntitites: CasesAndEntities\n): Promise<EntityItem[]> {\n return _hcluster(casesAndEntitites, 'ENTITIES');\n}\n","import { ComputedShapeParams } from './oncoprintshape';\nimport { RGBAColor } from './oncoprintruleset';\n\nexport type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;\n\nexport function cloneShallow<T extends Object>(obj: T) {\n const ret: Partial<T> = {};\n for (const key of Object.keys(obj) as (keyof T)[]) {\n ret[key] = obj[key];\n }\n return ret as T;\n}\n\nexport function extendArray(target: any[], source: any[]) {\n for (let i = 0; i < source.length; i++) {\n target.push(source[i]);\n }\n}\n\nexport function doesCellIntersectPixel(\n cellHitzone: [number, number],\n pixelX: number\n) {\n // checks intersection with the half-open interval [pixelX, pixelX+1)\n\n const lower = cellHitzone[0],\n upper = cellHitzone[1];\n if (upper < pixelX) {\n return false;\n } else if (lower < pixelX + 1) {\n return true;\n } else {\n return false;\n }\n}\n\nexport function ifndef<T>(x: T | undefined, val: T): T {\n return typeof x === 'undefined' ? val : x;\n}\n\nexport function shallowExtend<T extends Object, S extends Object>(\n target: T,\n source: S\n): T & S {\n const ret: Partial<T & S> = {};\n for (const key of Object.keys(target) as (keyof T & S)[]) {\n ret[key] = target[key as keyof T] as any;\n }\n for (const key of Object.keys(source) as (keyof T & S)[]) {\n ret[key] = source[key as keyof S] as any;\n }\n return ret as T & S;\n}\n\nexport function objectValues<T extends Object>(obj: T): T[keyof T][] {\n return Object.keys(obj).map(function(key: string & keyof T) {\n return obj[key];\n });\n}\n\nexport function arrayFindIndex<T>(\n arr: T[],\n predicate: (t: T) => boolean,\n start_index?: number\n) {\n start_index = start_index || 0;\n for (let i = start_index; i < arr.length; i++) {\n if (predicate(arr[i])) {\n return i;\n }\n }\n return -1;\n}\n\nexport function sgndiff(a: number, b: number) {\n if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n } else {\n return 0;\n }\n}\n\nexport function clamp(x: number, lower: number, upper: number) {\n return Math.max(lower, Math.min(upper, x));\n}\nexport function z_comparator(\n shapeA: ComputedShapeParams,\n shapeB: ComputedShapeParams\n) {\n const zA = shapeA.z;\n const zB = shapeB.z;\n if (zA < zB) {\n return -1;\n } else if (zA > zB) {\n return 1;\n } else {\n return 0;\n }\n}\n\nexport function fastParseInt10(\n x: string,\n substringStart?: number,\n substringEnd?: number\n) {\n // simple, fast parseInt when you know its a base-10 int and\n // you don't need any error handling.\n // Performance testing shows this is 85% faster than built-in parseInt\n substringStart = substringStart || 0;\n substringEnd = substringEnd || x.length;\n let ret = 0;\n for (let i = substringStart; i < substringEnd; i++) {\n ret *= 10;\n ret += x.charCodeAt(i) - 48; // the integer character codes from 0 to 9 are 48, 49, ..., 58\n }\n return ret;\n}\n\nexport function fastParseInt16(x: string) {\n // simple, fast parseInt when you know its a base-16 int and\n // you don't need any error handling.\n // Performance testing shows this is 43% faster than parseInt(x,16)\n let ret = 0;\n let nextCharCode: number;\n for (let i = 0; i < x.length; i++) {\n ret *= 16;\n nextCharCode = x.charCodeAt(i);\n if (nextCharCode > 96) {\n ret += nextCharCode - 87; // lower case letters start at 97. a is 97, should be 10\n } else if (nextCharCode > 64) {\n ret += nextCharCode - 55; // capital letters start at 65. A is 65, should be 10\n } else {\n // otherwise, its an integer\n ret += nextCharCode - 48;\n }\n }\n return ret;\n}\n\nexport function rgbString(color: RGBAColor) {\n return `rgb(${color[0]},${color[1]},${color[2]})`;\n}\n","import { extendArray, fastParseInt10, sgndiff } from './utils';\n\nconst string_type = typeof '';\n\nexport type SortingVector = (number | string)[];\n\ntype BucketRange = {\n lower_index_incl: number;\n upper_index_excl: number;\n};\n\ntype CompareEquals<T> = (a: T, b: T) => number;\n\ntype GetVector<T> = (t: T) => SortingVector;\n\nexport function bucketSort<T>(\n array: T[],\n getVector?: (t: T) => SortingVector,\n compareEquals?: CompareEquals<T>\n) {\n // array: an array of data\n // getVector: a function that takes an element of array and returns an int vector. defaults to identity\n // compareEquals: an optional standard sort comparator - if specified it is run on the\n // results of the final buckets before returning\n getVector =\n getVector ||\n (function(d: SortingVector) {\n return d;\n } as any);\n\n var current_sorted_array = array;\n var current_bucket_ranges = [\n { lower_index_incl: 0, upper_index_excl: array.length },\n ];\n\n var new_sorted_array: T[],\n new_bucket_ranges: BucketRange[],\n bucket_range,\n sorted_result;\n\n // find max length vector, to use as template for vector component types, and whose length will be the sort depth\n var max_length_vector: SortingVector = [];\n var proposed_vector;\n for (var i = 0; i < array.length; i++) {\n proposed_vector = getVector(array[i]);\n if (proposed_vector.length > max_length_vector.length) {\n max_length_vector = proposed_vector;\n }\n }\n var vector_length = max_length_vector.length;\n for (var vector_index = 0; vector_index < vector_length; vector_index++) {\n new_sorted_array = [];\n new_bucket_ranges = [];\n // sort each bucket range, and collect sorted array and new bucket ranges\n for (var j = 0; j < current_bucket_ranges.length; j++) {\n bucket_range = current_bucket_ranges[j];\n sorted_result = bucketSortHelper(\n current_sorted_array,\n getVector,\n bucket_range.lower_index_incl,\n bucket_range.upper_index_excl,\n vector_index,\n typeof max_length_vector[vector_index] === string_type\n );\n extendArray(new_sorted_array, sorted_result.sorted_array);\n extendArray(new_bucket_ranges, sorted_result.bucket_ranges);\n }\n current_sorted_array = new_sorted_array;\n current_bucket_ranges = new_bucket_ranges;\n }\n // if compareEquals specified, sort remaining buckets with it\n if (compareEquals) {\n new_sorted_array = [];\n var bucket_elts;\n for (var j = 0; j < current_bucket_ranges.length; j++) {\n bucket_range = current_bucket_ranges[j];\n bucket_elts = current_sorted_array.slice(\n bucket_range.lower_index_incl,\n bucket_range.upper_index_excl\n );\n bucket_elts.sort(compareEquals);\n extendArray(new_sorted_array, bucket_elts);\n }\n current_sorted_array = new_sorted_array;\n }\n return current_sorted_array;\n}\n\nexport function stringSort<T>(array: T[], getString?: (t: T) => string) {\n // array: an array of data\n // getString: a function that takes an element of `array` and returns a string. defaults to identity\n\n // returns strings sorted in \"natural order\" (i.e. numbers sorted correctly - P2 comes before P10)\n getString =\n getString ||\n (function(d: string) {\n return d;\n } as any);\n // compute string vectors we'll sort with\n var data = array.map(function(d) {\n return {\n d: d,\n vector: stringToVector(getString(d)),\n };\n });\n // sort\n var sorted = bucketSort(data, function(d) {\n return d.vector;\n });\n // return original passed-in data\n return sorted.map(function(datum) {\n return datum.d;\n });\n}\n\nexport function stringToVector(string: string) {\n var vector = [];\n var len = string.length;\n var numberStartIncl = -1;\n var charCode;\n for (var i = 0; i < len; i++) {\n charCode = string.charCodeAt(i);\n if (charCode >= 48 && charCode <= 57) {\n // if character is numeric digit 0-9\n if (numberStartIncl === -1) {\n // if we're not in a number yet, start number\n numberStartIncl = i;\n }\n // otherwise, nothing to do\n } else {\n // character is not numeric\n if (numberStartIncl > -1) {\n // if we're in a number, then we need to add the number to the vector\n vector.push(fastParseInt10(string, numberStartIncl, i));\n // and record no longer in a number\n numberStartIncl = -1;\n }\n // add character code to vector\n vector.push(charCode);\n }\n }\n if (numberStartIncl > -1) {\n // if we're in a number at the end of the string, add it to vector\n vector.push(fastParseInt10(string, numberStartIncl));\n // no need to reset numberStartIncl because the algorithm is done\n }\n return vector;\n}\n\nexport function compareFull<T>(\n d1: T,\n d2: T,\n getVector: GetVector<T>,\n compareEquals?: CompareEquals<T>\n) {\n // utility function - comparator that describes sort order given by bucketSort\n var ret = compare(getVector(d1), getVector(d2));\n if (ret === 0 && compareEquals) {\n ret = compareEquals(d1, d2);\n }\n return ret;\n}\n\nfunction compareVectorElements(elt1: number | string, elt2: number | string) {\n if (typeof elt1 === string_type) {\n return compare(\n stringToVector(elt1 as string),\n stringToVector(elt2 as string)\n );\n } else {\n return sgndiff(elt1 as number, elt2 as number);\n }\n}\n\nexport function compare(vector1: SortingVector, vector2: SortingVector) {\n // utility function - comparator that describes vector sort order given by bucketSort\n\n var ret = 0;\n // go left to right, return result of first difference\n // if one vector is shorter, that one comes first\n var cmp;\n for (var i = 0; i < vector1.length; i++) {\n if (i >= vector2.length) {\n // if we've gotten here, that means no change up til i, and vector2 is shorter\n ret = 1;\n break;\n }\n cmp = compareVectorElements(vector1[i], vector2[i]);\n if (cmp !== 0) {\n ret = cmp;\n break;\n }\n }\n if (ret === 0) {\n if (vector1.length < vector2.length) {\n // we iterated through vector1, so if we get here and no difference, then if\n // vector1 is shorter, then it comes first\n ret = -1;\n }\n // theres no way to get here and no difference if vector2 is shorter\n }\n return ret;\n}\n\nexport function bucketSortHelper<T>(\n array: T[],\n getVector: GetVector<T>,\n sort_range_lower_index_incl: number,\n sort_range_upper_index_excl: number,\n vector_index: number,\n isStringElt: boolean\n) {\n // returns { sorted_array: d[], bucket_ranges:{lower_index_incl, upper_index_excl}[]}} },\n // where sorted_array only contains elements from the specified range of\n // array[sort_range_lower_index_incl:sort_range_upper_index_excl]\n\n // stop if empty sort range, or end of vector\n if (\n !array.length ||\n sort_range_lower_index_incl >= sort_range_upper_index_excl\n ) {\n return {\n sorted_array: [],\n bucket_ranges: [],\n };\n }\n\n // bucket sort the specified range\n // gather elements into buckets\n var buckets: { [vectorElt: string]: T[] } = {};\n var keys = [];\n var vector, key;\n var sortFirst = [];\n for (\n var i = sort_range_lower_index_incl;\n i < sort_range_upper_index_excl;\n i++\n ) {\n vector = getVector(array[i]);\n if (vector.length > vector_index) {\n key = vector[vector_index];\n if (!(key in buckets)) {\n keys.push(key);\n buckets[key] = [];\n }\n buckets[key].push(array[i]);\n } else {\n // if the vector has no entry at this index, sort earlier, in line w string sorting convention of shorter strings first\n sortFirst.push(array[i]);\n }\n }\n // reduce in sorted order\n if (!isStringElt) {\n // sort numbers\n keys.sort(sgndiff);\n } else {\n // sort strings\n keys = stringSort(keys);\n }\n\n var sorted_array: T[] = [];\n var bucket_ranges = [];\n var lower_index_incl, upper_index_excl;\n // add sortFirst\n if (sortFirst.length) {\n lower_index_incl = sort_range_lower_index_incl + sorted_array.length;\n bucket_ranges.push({\n lower_index_incl: lower_index_incl,\n upper_index_excl: lower_index_incl + sortFirst.length,\n });\n extendArray(sorted_array, sortFirst);\n }\n for (var i = 0; i < keys.length; i++) {\n var bucket = buckets[keys[i]];\n lower_index_incl = sort_range_lower_index_incl + sorted_array.length;\n upper_index_excl = lower_index_incl + bucket.length;\n bucket_ranges.push({\n lower_index_incl: lower_index_incl,\n upper_index_excl: upper_index_excl,\n });\n extendArray(sorted_array, bucket);\n }\n\n return { sorted_array: sorted_array, bucket_ranges: bucket_ranges };\n}\n","import * as BucketSort from './bucketsort';\nimport binarysearch from './binarysearch';\nimport hasElementsInInterval from './haselementsininterval';\nimport {\n ColumnId,\n TrackSortComparator,\n TrackSortDirection,\n TrackSortSpecification,\n TrackSortSpecificationComparators,\n TrackSortSpecificationVectors,\n TrackSortVector,\n} from './oncoprintmodel';\nimport { SortingVector } from './bucketsort';\n\ntype DatumWithVectors<T> = {\n d: T;\n preferred_vector: SortingVector;\n mandatory_vector: SortingVector;\n};\n\nexport default class PrecomputedComparator<T> {\n private preferred_change_points: number[];\n private mandatory_change_points: number[];\n private id_to_index: { [columnId: string]: number };\n\n constructor(\n list: T[],\n comparator: TrackSortSpecification<T>,\n sort_direction: TrackSortDirection,\n element_identifier_key: string & keyof T\n ) {\n if (comparator.isVector) {\n this.initializeVector(\n list,\n comparator,\n sort_direction,\n element_identifier_key\n );\n } else {\n this.initializeComparator(\n list,\n comparator as TrackSortSpecificationComparators<T>,\n sort_direction,\n element_identifier_key\n );\n }\n }\n\n private initializeComparator(\n list: T[],\n comparator:\n | TrackSortComparator<T>\n | TrackSortSpecificationComparators<T>,\n sort_direction: TrackSortDirection,\n element_identifier_key: keyof T\n ) {\n // initializeComparator initializes the PrecomputedComparator in the case that\n //\tthe sort order is given using a comparator\n let preferred, mandatory;\n if (typeof comparator === 'function') {\n preferred = comparator;\n mandatory = comparator;\n } else {\n preferred = comparator.preferred;\n mandatory = comparator.mandatory;\n }\n function makeDirectedComparator(cmp: TrackSortComparator<T>) {\n return function(d1: T, d2: T) {\n if (sort_direction === 0) {\n return 0;\n }\n const res = cmp(d1, d2);\n if (res === 2) {\n return 1;\n } else if (res === -2) {\n return -1;\n } else {\n return res * sort_direction;\n }\n };\n }\n const preferredComparator = makeDirectedComparator(preferred);\n const mandatoryComparator = makeDirectedComparator(mandatory);\n const sorted_list = list.sort(preferredComparator);\n\n // i is a change point iff comp(elt[i], elt[i+1]) !== 0\n this.preferred_change_points = [0]; // i is a preferred change pt iff its a change pt with comp = preferredComparator but not with comp = mandatoryComparator\n this.mandatory_change_points = [0]; // i is a mandatory change pt iff its a change pt with comp = mandatoryComparator\n\n // note that by the following process, preferred_change_points and mandatory_change_points are sorted\n for (let i = 1; i < sorted_list.length; i++) {\n if (mandatoryComparator(sorted_list[i - 1], sorted_list[i]) !== 0) {\n this.mandatory_change_points.push(i);\n } else if (\n preferredComparator(sorted_list[i - 1], sorted_list[i]) !== 0\n ) {\n this.preferred_change_points.push(i);\n }\n }\n this.id_to_index = {};\n for (let i = 0; i < sorted_list.length; i++) {\n this.id_to_index[\n (sorted_list[i][element_identifier_key] as any) as string\n ] = i;\n }\n }\n\n private initializeVector(\n list: T[],\n getVector: TrackSortSpecificationVectors<T>,\n sort_direction: TrackSortDirection,\n element_identifier_key: keyof T\n ) {\n // initializeVector initializes the PrecomputedComparator in the case that the sort order is specified by vectors for bucket sort\n function makeDirectedVector(vec: TrackSortVector<T>) {\n if (sort_direction === 0) {\n return function(d: T) {\n return 0;\n };\n } else {\n return function(d: T) {\n return vec(d).map(function(n: number | string) {\n if (typeof n === 'number') {\n return n * sort_direction;\n } else {\n return n;\n }\n });\n };\n }\n }\n const preferredVector = makeDirectedVector(getVector.preferred);\n const mandatoryVector = makeDirectedVector(getVector.mandatory);\n\n // associate each data to its vector and sort them together\n const list_with_vectors: DatumWithVectors<T>[] = list.map(function(d) {\n return {\n d: d,\n preferred_vector: preferredVector(d),\n mandatory_vector: mandatoryVector(d),\n };\n }) as DatumWithVectors<T>[];\n // sort by preferred vector\n const _compareEquals = getVector.compareEquals;\n const compareEquals = _compareEquals\n ? function(d1: DatumWithVectors<T>, d2: DatumWithVectors<T>) {\n return _compareEquals(d1.d, d2.d);\n }\n : undefined;\n const sorted_list = BucketSort.bucketSort(\n list_with_vectors,\n function(d) {\n return d.preferred_vector;\n },\n compareEquals\n );\n\n // i is a change point iff comp(elt[i], elt[i+1]) !== 0\n this.preferred_change_points = [0]; // i (besides 0) is a preferred change pt iff its a change pt with comp = preferredComparator but not with comp = mandatoryComparator\n this.mandatory_change_points = [0]; // i (besides 0) is a mandatory change pt iff its a change pt with comp = mandatoryComparator\n\n // note that by the following process, preferred_change_points and mandatory_change_points are sorted\n const getMandatoryVector = function(d: {\n mandatory_vector: (number | string)[];\n }) {\n return d.mandatory_vector;\n };\n const getPreferredVector = function(d: {\n preferred_vector: (number | string)[];\n }) {\n return d.preferred_vector;\n };\n for (let i = 1; i < sorted_list.length; i++) {\n if (\n BucketSort.compareFull(\n sorted_list[i - 1],\n sorted_list[i],\n getMandatoryVector\n ) !== 0\n ) {\n this.mandatory_change_points.push(i);\n } else if (\n BucketSort.compareFull(\n sorted_list[i - 1],\n sorted_list[i],\n getPreferredVector,\n compareEquals\n ) !== 0\n ) {\n this.preferred_change_points.push(i);\n }\n }\n\n this.id_to_index = {};\n for (let i = 0; i < sorted_list.length; i++) {\n this.id_to_index[\n (sorted_list[i].d[element_identifier_key] as any) as string\n ] = i;\n }\n }\n\n public getSortValue(id: ColumnId) {\n const index = this.id_to_index[id];\n // find greatest lower change points - thats where this should be sorted by\n //\t\tbecause everything between change points has same sort value\n let mandatory = 0;\n let preferred = 0;\n if (this.mandatory_change_points.length) {\n mandatory = this.mandatory_change_points[\n binarysearch(\n this.mandatory_change_points,\n index,\n function(ind) {\n return ind;\n },\n true\n )\n ];\n }\n if (this.preferred_change_points.length) {\n preferred = this.preferred_change_points[\n binarysearch(\n this.preferred_change_points,\n index,\n function(ind) {\n return ind;\n },\n true\n )\n ];\n }\n return {\n mandatory: mandatory,\n preferred: preferred,\n };\n }\n}\n","import OncoprintModel, { TrackGroupProp, TrackProp } from './oncoprintmodel';\n\nexport function calculateTrackTops(model: OncoprintModel, zoomed: boolean) {\n return calculateTrackAndHeaderTops(model, zoomed).trackTops;\n}\n\nexport function calculateHeaderTops(model: OncoprintModel, zoomed: boolean) {\n return calculateTrackAndHeaderTops(model, zoomed).headerTops;\n}\n\nexport function calculateTrackAndHeaderTops(\n model: OncoprintModel,\n zoomed: boolean\n) {\n const trackTops: TrackProp<number> = {};\n const headerTops: TrackGroupProp<number> = {};\n const groups = model.getTrackGroups();\n let y = 0;\n for (let i = 0; i < groups.length; i++) {\n const group = groups[i];\n if (group.header) {\n headerTops[i] = y;\n }\n if (group.tracks.length > 0) {\n // space at top for header\n y += model.getTrackGroupHeaderHeight(group);\n }\n for (let j = 0; j < group.tracks.length; j++) {\n const track_id = group.tracks[j];\n trackTops[track_id] = y;\n y += model.getTrackHeight(track_id, !zoomed);\n }\n if (group.tracks.length > 0) {\n // space at bottom for padding\n y += model.getTrackGroupPadding(!zoomed);\n }\n }\n return { trackTops, headerTops };\n}\n","/* jshint browserify: true, asi: true */\n\nimport binarysearch from './binarysearch';\nimport hasElementsInInterval from './haselementsininterval';\nimport CachedProperty from './CachedProperty';\nimport { hclusterColumns, hclusterTracks } from './clustering';\nimport $ from 'jquery';\nimport * as BucketSort from './bucketsort';\nimport {\n cloneShallow,\n doesCellIntersectPixel,\n ifndef,\n z_comparator,\n} from './utils';\nimport _ from 'lodash';\nimport { RuleSet, RuleSetParams, RuleWithId } from './oncoprintruleset';\nimport { InitParams } from './oncoprint';\nimport { ComputedShapeParams } from './oncoprintshape';\nimport { CaseItem, EntityItem } from './workers/clustering-worker';\nimport PrecomputedComparator from './precomputedcomparator';\nimport { calculateHeaderTops, calculateTrackTops } from './modelutils';\n\nexport type ColumnId = string;\nexport type ColumnIndex = number;\nexport type TrackId = number;\nexport type Datum = any;\nexport type RuleSetId = number;\nexport type TrackGroupHeader = {\n label: {\n text: string;\n // more styling options can go here\n };\n options: CustomTrackGroupOption[]; // for options menu dropdown\n};\nexport type TrackGroup = {\n header?: TrackGroupHeader;\n tracks: TrackId[];\n};\nexport type TrackGroupIndex = number;\nexport type TrackSortDirection = 0 | 1 | -1;\nexport type TrackSortComparator<D> = (d1: D, d2: D) => number; //returns (0|1|2|-1|-2); for comparison-based sort, where 2 and -2 mean force to end or beginning (resp) no matter what direction sorted in\nexport type TrackSortVector<D> = (d: D) => (number | string)[]; // maps data to vector used for bucket sort - types of elements in each position must be same, i.e. Kth element must always be a number, or always be a string\nexport type TrackTooltipFn<D> = (cell_data: D[]) => HTMLElement | string | any;\nexport type TrackSortSpecificationComparators<D> = {\n mandatory: TrackSortComparator<D>; // specifies the mandatory order for the track\n preferred: TrackSortComparator<D>; // specifies the preferred order for the track (can be overridden by mandatory order of higher track)\n isVector?: false;\n};\nexport type TrackSortSpecificationVectors<D> = {\n mandatory: TrackSortVector<D>; // specifies the mandatory order for the track\n preferred: TrackSortVector<D>; // specifies the preferred order for the track (can be overridden by mandatory order of higher track)\n isVector: true;\n compareEquals?: TrackSortComparator<D>; // specifies a comparator to be applied to sort among equal sort vectors in the *preferred* order (optional). eg sort by sample id if all else equal\n};\nexport type TrackSortSpecification<D> =\n | TrackSortSpecificationComparators<D>\n | TrackSortSpecificationVectors<D>;\nexport type ActiveRules = { [ruleId: number]: boolean };\nexport type ActiveRulesCount = { [ruleId: number]: number };\nexport type TrackSortDirectionChangeCallback = (\n track_id: TrackId,\n dir: number\n) => void;\nexport type CustomTrackOption = {\n label?: string;\n separator?: boolean;\n onClick?: (id: TrackId) => void;\n weight?: string;\n disabled?: boolean;\n};\nexport type CustomTrackGroupOption = {\n label?: string;\n separator?: boolean;\n onClick?: (id: TrackGroupIndex) => void;\n weight?: () => string;\n disabled?: () => boolean;\n};\nexport type UserTrackSpec<D> = {\n target_group?: TrackGroupIndex;\n cell_height?: number;\n track_padding?: number;\n has_column_spacing?: boolean;\n data_id_key?: string & keyof D;\n tooltipFn?: TrackTooltipFn<D>;\n movable?: boolean;\n removable?: boolean;\n removeCallback?: (track_id: TrackId) => void;\n onClickRemoveInTrackMenu?: (track_id: TrackId) => void;\n label?: string;\n sublabel?: string;\n html_label?: string;\n track_label_color?: string;\n track_label_circle_color?: string;\n track_label_font_weight?: string;\n track_label_left_padding?: number;\n link_url?: string;\n description?: string;\n track_info?: string;\n sortCmpFn: TrackSortSpecification<D>;\n sort_direction_changeable?: boolean;\n onSortDirectionChange?: TrackSortDirectionChangeCallback;\n init_sort_direction?: TrackSortDirection;\n data?: D[];\n rule_set_params?: RuleSetParams;\n expansion_of?: TrackId;\n expandCallback?: (id: TrackId) => void;\n expandButtonTextGetter?: (is_expanded: boolean) => string;\n important_ids?: string[];\n custom_track_options?: CustomTrackOption[];\n $track_info_tooltip_elt?: JQuery;\n track_can_show_gaps?: boolean;\n show_gaps_on_init?: boolean;\n};\nexport type LibraryTrackSpec<D> = UserTrackSpec<D> & {\n rule_set: RuleSet;\n track_id: TrackId;\n};\nexport type TrackOverlappingCells = {\n ids: ColumnId[];\n track: TrackId;\n top: number;\n left: number;\n};\n\nexport type SortConfig =\n | {\n type: 'alphabetical';\n }\n | {\n type: 'order';\n order: string[];\n }\n | {\n type: 'cluster';\n track_group_index: number;\n clusterValueFn: (datum: any) => number;\n }\n | { type?: '' };\n\nexport type IdentifiedShapeList = {\n id: ColumnId;\n shape_list: ComputedShapeParams[];\n};\n\nexport type ClusterSortResult = {\n track_group_index: TrackGroupIndex;\n track_id_order: TrackId[];\n};\n\nexport type ColumnLabel = {\n left_padding_percent?: number;\n text_color?: string;\n circle_color?: string;\n angle_in_degrees?: number;\n text: string;\n};\n\nclass UnionOfSets {\n // a set, to be passed in as argument, is an object where the values are truthy\n private union_count: { [key: string]: number } = {};\n private sets: { [setId: string]: { [key: string]: boolean } } = {};\n\n private setOfKeys(obj: { [key: string]: any }) {\n const set: { [key: string]: boolean } = {};\n for (const k of Object.keys(obj)) {\n if (typeof obj[k] !== 'undefined') {\n set[k] = true;\n }\n }\n return set;\n }\n\n public putSet(id: string, set: { [key: string]: boolean }) {\n this.removeSet(id);\n this.sets[id] = set;\n\n for (const k of Object.keys(set)) {\n if (set[k]) {\n this.union_count[k] = this.union_count[k] || 0;\n this.union_count[k] += 1;\n }\n }\n }\n\n public removeSet(id: string) {\n const union_count = this.union_count;\n const old_set = this.sets[id] || {};\n for (const k of Object.keys(old_set)) {\n if (old_set[k]) {\n union_count[k] -= 1;\n if (union_count[k] === 0) {\n delete union_count[k];\n }\n }\n }\n delete this.sets[id];\n }\n\n public getUnion() {\n return this.setOfKeys(this.union_count);\n }\n}\n\nfunction arrayUnique(arr: string[]) {\n const present: { [elt: string]: boolean } = {};\n const unique = [];\n for (let i = 0; i < arr.length; i++) {\n if (typeof present[arr[i]] === 'undefined') {\n present[arr[i]] = true;\n unique.push(arr[i]);\n }\n }\n return unique;\n}\n\nfunction copyShallowObject<T>(obj: { [key: string]: T }) {\n const copy: { [key: string]: T } = {};\n for (const key of Object.keys(obj)) {\n copy[key] = obj[key];\n }\n return copy;\n}\n\nfunction clamp(x: number, lower: number, upper: number) {\n return Math.min(upper, Math.max(lower, x));\n}\n\nconst MIN_ZOOM_PIXELS = 100;\nconst MIN_CELL_HEIGHT_PIXELS = 3;\n\nexport type TrackProp<T> = { [trackId: number]: T };\nexport type TrackGroupProp<T> = { [trackGroupIndex: number]: T };\nexport type ColumnProp<T> = { [columnId: string]: T };\nexport type ColumnIdSet = { [columnId: string]: any };\n\nexport default class OncoprintModel {\n // Global properties\n private sort_config: SortConfig;\n public rendering_suppressed_depth: number;\n public keep_sorted = false;\n\n // Rendering properties\n public readonly max_height: number;\n private cell_width: number;\n private horz_zoom: number;\n private vert_zoom: number;\n private horz_scroll: number;\n private vert_scroll: number;\n private bottom_padding: number;\n private track_group_padding: number;\n private cell_padding: number;\n private cell_padding_on: boolean;\n private cell_padding_off_cell_width_threshold: number;\n private cell_padding_off_because_of_zoom: boolean;\n private id_order: ColumnId[];\n private hidden_ids: ColumnProp<boolean>;\n private highlighted_ids: ColumnId[];\n private highlighted_tracks: TrackId[];\n private track_group_legend_order: TrackGroupIndex[];\n private show_track_sublabels: boolean;\n private show_track_labels: boolean;\n private column_labels: ColumnProp<ColumnLabel>;\n\n // Track properties\n private track_important_ids: TrackProp<ColumnProp<boolean>>; // set of \"important\" ids - only these ids will cause a used rule to become active and thus shown in the legend\n private track_label: TrackProp<string>;\n private track_label_color: TrackProp<string>;\n private track_label_circle_color: TrackProp<string>;\n private track_label_font_weight: TrackProp<string>;\n private track_label_left_padding: TrackProp<number>;\n private track_sublabel: TrackProp<string>;\n private track_html_label: TrackProp<string>;\n private track_link_url: TrackProp<string>;\n private track_description: TrackProp<string>;\n private cell_height: TrackProp<number>;\n private track_padding: TrackProp<number>;\n private track_data_id_key: TrackProp<string>;\n private track_tooltip_fn: TrackProp<TrackTooltipFn<any>>;\n private track_movable: TrackProp<boolean>;\n private track_removable: TrackProp<boolean>;\n private track_remove_callback: TrackProp<(track_id: TrackId) => void>;\n private track_remove_option_callback: TrackProp<\n (track_id: TrackId) => void\n >;\n private track_sort_cmp_fn: TrackProp<TrackSortSpecification<Datum>>;\n private track_sort_direction_changeable: TrackProp<boolean>;\n private track_sort_direction: TrackProp<TrackSortDirection>;\n private track_sort_direction_change_callback: TrackProp<\n TrackSortDirectionChangeCallback\n >;\n private track_data: TrackProp<Datum[]>;\n private track_rule_set_id: TrackProp<RuleSetId>;\n private track_active_rules: TrackProp<ActiveRules>;\n private track_info: TrackProp<string>;\n private $track_info_tooltip_elt: TrackProp<JQuery>;\n private track_has_column_spacing: TrackProp<boolean>;\n private track_expansion_enabled: TrackProp<boolean>;\n private track_expand_callback: TrackProp<(trackId: TrackId) => void>;\n private track_expand_button_getter: TrackProp<\n (is_expanded: boolean) => string\n >;\n public track_expansion_tracks: TrackProp<TrackId[]>;\n private track_expansion_parent: TrackProp<TrackId>;\n private track_custom_options: TrackProp<CustomTrackOption[]>;\n private track_can_show_gaps: TrackProp<boolean>;\n private track_show_gaps: TrackProp<boolean>;\n\n // Rule set properties\n private rule_sets: { [ruleSetId: number]: RuleSet };\n private rule_set_active_rules: { [ruleSetId: number]: ActiveRulesCount };\n\n // Cached and recomputed properties\n private visible_id_order: CachedProperty<ColumnId[]>;\n private track_id_to_datum: CachedProperty<TrackProp<ColumnProp<Datum>>>;\n private track_present_ids: CachedProperty<UnionOfSets>;\n private present_ids: CachedProperty<ColumnProp<boolean>>;\n private id_to_index: CachedProperty<ColumnProp<number>>;\n private visible_id_to_index: CachedProperty<ColumnProp<number>>;\n private track_tops: CachedProperty<TrackProp<number>>;\n private cell_tops: CachedProperty<TrackProp<number>>;\n private label_tops: CachedProperty<TrackProp<number>>;\n private track_tops_zoomed: CachedProperty<TrackProp<number>>;\n private header_tops_zoomed: CachedProperty<TrackProp<number>>;\n private cell_tops_zoomed: CachedProperty<TrackProp<number>>;\n private label_tops_zoomed: CachedProperty<TrackProp<number>>;\n private column_left: CachedProperty<ColumnProp<number>>;\n private column_left_always_with_padding: CachedProperty<ColumnProp<number>>;\n private zoomed_column_left: CachedProperty<ColumnProp<number>>;\n private column_left_no_padding: CachedProperty<ColumnProp<number>>;\n private precomputed_comparator: CachedProperty<\n TrackProp<PrecomputedComparator<Datum>>\n >;\n private ids_after_a_gap: CachedProperty<ColumnIdSet>;\n private column_indexes_after_a_gap: CachedProperty<number[]>;\n\n private track_groups: TrackGroup[];\n private unclustered_track_group_order?: TrackId[];\n private track_group_sort_priority: TrackGroupIndex[];\n\n constructor(params: InitParams) {\n const model = this;\n\n this.sort_config = {};\n this.rendering_suppressed_depth = 0;\n\n this.max_height = ifndef(params.max_height, 500);\n this.cell_width = ifndef(params.init_cell_width, 6);\n this.horz_zoom = ifndef(params.init_horz_zoom, 1);\n this.vert_zoom = ifndef(params.init_vert_zoom, 1);\n this.horz_scroll = 0;\n this.vert_scroll = 0;\n this.bottom_padding = 0;\n this.track_group_padding = ifndef(params.init_track_group_padding, 10);\n this.cell_padding = ifndef(params.init_cell_padding, 3);\n this.cell_padding_on = ifndef(params.init_cell_padding_on, true);\n this.cell_padding_off_cell_width_threshold = ifndef(\n params.cell_padding_off_cell_width_threshold,\n 2\n );\n this.cell_padding_off_because_of_zoom =\n this.getCellWidth() < this.cell_padding_off_cell_width_threshold;\n this.id_order = [];\n this.hidden_ids = {};\n this.highlighted_ids = [];\n this.highlighted_tracks = [];\n this.track_group_legend_order = [];\n this.show_track_sublabels = false;\n this.show_track_labels = true;\n this.column_labels = {};\n\n // Track Properties\n this.track_important_ids = {}; // a set of \"important\" ids - only these ids will cause a used rule to become active and thus shown in the legend\n this.track_label = {};\n this.track_label_color = {};\n this.track_label_circle_color = {};\n this.track_label_font_weight = {};\n this.track_label_left_padding = {}; // TODO: consolidate track styling properties into one object (help me typescript)\n this.track_sublabel = {};\n this.track_html_label = {};\n this.track_link_url = {};\n this.track_description = {};\n this.cell_height = {};\n this.track_padding = {};\n this.track_data_id_key = {};\n this.track_tooltip_fn = {};\n this.track_movable = {};\n this.track_removable = {};\n this.track_remove_callback = {};\n this.track_remove_option_callback = {};\n this.track_sort_cmp_fn = {};\n this.track_sort_direction_changeable = {};\n this.track_sort_direction = {}; // 1: ascending, -1: descending, 0: not\n this.track_sort_direction_change_callback = {};\n this.track_data = {};\n this.track_rule_set_id = {}; // track id -> rule set id\n this.track_active_rules = {}; // from track id to active rule map (map with rule ids as keys)\n this.track_info = {};\n this.$track_info_tooltip_elt = {};\n this.track_has_column_spacing = {}; // track id -> boolean\n this.track_expansion_enabled = {}; // track id -> boolean or undefined\n this.track_expand_callback = {}; // track id -> function that adds expansion tracks for its track if set\n this.track_expand_button_getter = {}; // track id -> function from boolean to string if customized\n this.track_expansion_tracks = {}; // track id -> array of track ids if applicable\n this.track_expansion_parent = {}; // track id -> track id if applicable\n this.track_custom_options = {}; // track id -> { label, onClick, weight, disabled }[] ( see index.d.ts :: CustomTrackOption )\n this.track_can_show_gaps = {};\n this.track_show_gaps = {};\n\n // Rule Set Properties\n this.rule_sets = {}; // map from rule set id to rule set\n this.rule_set_active_rules = {}; // map from rule set id to map from rule id to use count\n\n // Cached and Recomputed Properties\n this.visible_id_order = new CachedProperty([], function(\n model: OncoprintModel\n ) {\n const hidden_ids = model.hidden_ids;\n return model.id_order.filter(function(id) {\n return !hidden_ids[id];\n });\n });\n this.track_id_to_datum = new CachedProperty({}, function(\n model,\n track_id\n ) {\n const curr = model.track_id_to_datum.get();\n if (model.getContainingTrackGroup(track_id) !== null) {\n const map: ColumnProp<Datum> = {};\n const data = model.getTrackData(track_id) || [];\n const data_id_key = model.getTrackDataIdKey(track_id) || '';\n for (let i = 0; i < data.length; i++) {\n map[data[i][data_id_key] as string] = data[i];\n }\n curr[track_id] = map;\n } else {\n delete curr[track_id];\n }\n return curr;\n });\n this.track_present_ids = new CachedProperty(new UnionOfSets(), function(\n model,\n track_id\n ) {\n const union = model.track_present_ids.get();\n if (model.getContainingTrackGroup(track_id) !== null) {\n const ids: ColumnProp<boolean> = {};\n const data = model.getTrackData(track_id) || [];\n const data_id_key = model.getTrackDataIdKey(track_id) || '';\n for (let i = 0; i < data.length; i++) {\n ids[data[i][data_id_key] as string] = true;\n }\n union.putSet(track_id, ids);\n } else {\n union.removeSet(track_id);\n }\n return union;\n });\n this.present_ids = new CachedProperty({}, function() {\n return model.track_present_ids.get().getUnion();\n });\n this.track_present_ids.addBoundProperty(this.present_ids);\n\n this.id_to_index = new CachedProperty({}, function() {\n const id_to_index: ColumnProp<number> = {};\n const id_order = model.getIdOrder(true);\n for (let i = 0; i < id_order.length; i++) {\n id_to_index[id_order[i]] = i;\n }\n return id_to_index;\n });\n this.visible_id_to_index = new CachedProperty({}, function() {\n const id_to_index: ColumnProp<number> = {};\n const id_order = model.getIdOrder();\n for (let i = 0; i < id_order.length; i++) {\n id_to_index[id_order[i]] = i;\n }\n return id_to_index;\n });\n this.visible_id_order.addBoundProperty(this.visible_id_to_index);\n\n this.track_groups = [];\n this.track_group_sort_priority = [];\n\n this.track_tops = new CachedProperty({}, function() {\n return calculateTrackTops(model, false);\n });\n this.cell_tops = new CachedProperty({}, function() {\n const track_ids = model.getTracks();\n const track_tops = model.track_tops.get();\n const cell_tops: TrackProp<number> = {};\n for (const id of track_ids) {\n if (id in track_tops) {\n cell_tops[id] =\n track_tops[id] + model.getTrackPadding(id, true);\n }\n }\n return cell_tops;\n });\n this.label_tops = new CachedProperty({}, function() {\n return model.cell_tops.get();\n });\n\n this.track_tops.addBoundProperty(this.cell_tops);\n this.cell_tops.addBoundProperty(this.label_tops);\n\n this.track_tops_zoomed = new CachedProperty({}, function() {\n return calculateTrackTops(model, true);\n });\n this.header_tops_zoomed = new CachedProperty({}, function() {\n return calculateHeaderTops(model, true);\n });\n this.cell_tops_zoomed = new CachedProperty({}, function() {\n const track_ids = model.getTracks();\n const track_tops = model.track_tops_zoomed.get();\n const cell_tops: TrackProp<number> = {};\n for (const id of track_ids) {\n if (id in track_tops) {\n cell_tops[id] = track_tops[id] + model.getTrackPadding(id);\n }\n }\n return cell_tops;\n });\n this.label_tops_zoomed = new CachedProperty({}, function() {\n return model.cell_tops_zoomed.get();\n });\n\n this.track_tops.addBoundProperty(this.track_tops_zoomed);\n this.track_tops_zoomed.addBoundProperty(this.cell_tops_zoomed);\n this.track_tops_zoomed.addBoundProperty(this.header_tops_zoomed);\n this.cell_tops_zoomed.addBoundProperty(this.label_tops_zoomed);\n\n this.precomputed_comparator = new CachedProperty({}, function(\n model: OncoprintModel,\n track_id: TrackId\n ) {\n const curr_precomputed_comparator = model.precomputed_comparator.get();\n curr_precomputed_comparator[track_id] = new PrecomputedComparator(\n model.getTrackData(track_id),\n model.getTrackSortComparator(track_id),\n model.getTrackSortDirection(track_id),\n model.getTrackDataIdKey(track_id)\n );\n return curr_precomputed_comparator;\n }); // track_id -> PrecomputedComparator\n\n this.ids_after_a_gap = new CachedProperty({}, function(\n model: OncoprintModel\n ) {\n const gapIds: { [columnId: string]: boolean } = {};\n const precomputedComparator = model.precomputed_comparator.get();\n const trackIdsWithGaps = model\n .getTracks()\n .filter(trackId => model.getTrackShowGaps(trackId));\n const ids = model.visible_id_order.get();\n\n for (let i = 1; i < ids.length; i++) {\n for (const trackId of trackIdsWithGaps) {\n const comparator = precomputedComparator[trackId];\n if (\n comparator.getSortValue(ids[i - 1]).mandatory !==\n comparator.getSortValue(ids[i]).mandatory\n ) {\n gapIds[ids[i]] = true;\n }\n }\n }\n\n return gapIds;\n });\n this.visible_id_order.addBoundProperty(this.ids_after_a_gap);\n this.precomputed_comparator.addBoundProperty(this.ids_after_a_gap);\n\n this.column_indexes_after_a_gap = new CachedProperty([], function(\n model: OncoprintModel\n ) {\n const ids_after_a_gap = model.ids_after_a_gap.get();\n const id_to_index = model.getVisibleIdToIndexMap();\n return Object.keys(ids_after_a_gap).map(id => id_to_index[id]);\n });\n this.ids_after_a_gap.addBoundProperty(this.column_indexes_after_a_gap);\n\n this.column_left = new CachedProperty({}, function() {\n const cell_width = model.getCellWidth(true);\n const gap_size = model.getGapSize();\n const ids_after_a_gap = model.ids_after_a_gap.get();\n const cell_padding = model.getCellPadding(true);\n const left: ColumnProp<number> = {};\n const ids = model.getIdOrder();\n let current_left = 0;\n for (let i = 0; i < ids.length; i++) {\n if (ids_after_a_gap[ids[i]]) {\n current_left += gap_size;\n }\n left[ids[i]] = current_left;\n current_left += cell_width + cell_padding;\n }\n return left;\n });\n this.ids_after_a_gap.addBoundProperty(this.column_left);\n\n this.column_left_always_with_padding = new CachedProperty(\n {},\n function() {\n const cell_width = model.getCellWidth(true);\n const gap_size = model.getGapSize();\n const ids_after_a_gap = model.ids_after_a_gap.get();\n const cell_padding = model.getCellPadding(true, true);\n const left: ColumnProp<number> = {};\n const ids = model.getIdOrder();\n let current_left = 0;\n for (let i = 0; i < ids.length; i++) {\n if (ids_after_a_gap[ids[i]]) {\n current_left += gap_size;\n }\n left[ids[i]] = current_left;\n current_left += cell_width + cell_padding;\n }\n return left;\n }\n );\n this.column_left.addBoundProperty(this.column_left_always_with_padding);\n\n this.zoomed_column_left = new CachedProperty({}, function() {\n const cell_width = model.getCellWidth();\n const gap_size = model.getGapSize();\n const ids_after_a_gap = model.ids_after_a_gap.get();\n const cell_padding = model.getCellPadding();\n const left: ColumnProp<number> = {};\n const ids = model.getIdOrder();\n let current_left = 0;\n for (let i = 0; i < ids.length; i++) {\n if (ids_after_a_gap[ids[i]]) {\n current_left += gap_size;\n }\n left[ids[i]] = current_left;\n current_left += cell_width + cell_padding;\n }\n return left;\n });\n this.ids_after_a_gap.addBoundProperty(this.zoomed_column_left);\n this.column_left.addBoundProperty(this.zoomed_column_left);\n\n this.column_left_no_padding = new CachedProperty({}, function() {\n const cell_width = model.getCellWidth(true);\n const gap_size = model.getGapSize();\n const ids_after_a_gap = model.ids_after_a_gap.get();\n const left: ColumnProp<number> = {};\n const ids = model.getIdOrder();\n let current_left = 0;\n for (let i = 0; i < ids.length; i++) {\n if (ids_after_a_gap[ids[i]]) {\n current_left += gap_size;\n }\n left[ids[i]] = current_left;\n current_left += cell_width;\n }\n return left;\n });\n this.ids_after_a_gap.addBoundProperty(this.column_left_no_padding);\n this.column_left.addBoundProperty(this.column_left_no_padding);\n }\n\n public setTrackShowGaps(trackId: TrackId, show: boolean) {\n this.track_show_gaps[trackId] = show;\n\n this.ids_after_a_gap.update(this);\n }\n\n public getTrackShowGaps(trackId: TrackId) {\n return this.track_show_gaps[trackId];\n }\n\n public getTrackCanShowGaps(trackId: TrackId) {\n return this.track_can_show_gaps[trackId];\n }\n\n public getColumnIndexesAfterAGap() {\n return this.column_indexes_after_a_gap.get();\n }\n\n public setTrackGroupHeader(\n index: TrackGroupIndex,\n header?: TrackGroupHeader\n ) {\n this.ensureTrackGroupExists(index);\n this.getTrackGroups()[index].header = header;\n this.track_tops.update();\n }\n\n public getTrackGroupHeaderHeight(trackGroup: TrackGroup) {\n // TODO?: depends on text style settings\n // TODO?: depends on zoom? i dont think it should\n if (trackGroup.header) {\n return 32;\n } else {\n return 0;\n }\n }\n\n public toggleCellPadding() {\n this.cell_padding_on = !this.cell_padding_on;\n this.column_left.update();\n return this.cell_padding_on;\n }\n\n public getCellPadding(base?: boolean, dont_consider_zoom?: boolean) {\n return (\n this.cell_padding *\n (base ? 1 : this.horz_zoom) *\n +this.cell_padding_on *\n (dont_consider_zoom ? 1 : +!this.cell_padding_off_because_of_zoom)\n );\n }\n\n public getHorzZoom() {\n return this.horz_zoom;\n }\n\n public getIdsInZoomedLeftInterval(left: number, right: number) {\n const leftIdIndex = this.getClosestColumnIndexToLeft(left, true);\n const rightIdIndex = this.getClosestColumnIndexToLeft(\n right,\n true,\n true\n );\n return this.getIdOrder().slice(leftIdIndex, rightIdIndex);\n }\n\n public getHorzZoomToFitCols(\n width: number,\n left_col_incl: ColumnIndex,\n right_col_excl: ColumnIndex\n ) {\n // in the end, the zoomed width is:\n // W = z*(right_col_excl - left_col_incl)*baseColumnWidth + #gaps*gapSize\n // -> z = (width - #gaps*gapSize)/(right_col_excl - left_col_incl)*baseColumnWidth\n\n // numerator calculations\n const allGaps = this.getColumnIndexesAfterAGap();\n const gapsBetween = allGaps.filter(\n g => g >= left_col_incl && g < right_col_excl\n );\n const numerator = width - gapsBetween.length * this.getGapSize();\n\n // denominator calculations\n const columnWidthWithPadding =\n this.getCellWidth(true) + this.getCellPadding(true, true);\n const columnWidthNoPadding = this.getCellWidth(true);\n\n const denominatorWithPadding =\n (right_col_excl - left_col_incl) * columnWidthWithPadding;\n const denominatorNoPadding =\n (right_col_excl - left_col_incl) * columnWidthNoPadding;\n\n // put them together\n const zoom_if_cell_padding_on = clamp(\n numerator / denominatorWithPadding,\n 0,\n 1\n );\n const zoom_if_cell_padding_off = clamp(\n numerator / denominatorNoPadding,\n 0,\n 1\n );\n\n let zoom;\n if (!this.cell_padding_on) {\n zoom = zoom_if_cell_padding_off;\n } else {\n const cell_width = this.getCellWidth(true);\n if (\n cell_width * zoom_if_cell_padding_on <\n this.cell_padding_off_cell_width_threshold\n ) {\n if (\n cell_width * zoom_if_cell_padding_off >=\n this.cell_padding_off_cell_width_threshold\n ) {\n // Because of cell padding toggling there's no way to get exactly the desired number of columns.\n // We can see this by contradiction: if we assume that cell padding is on, and try to fit exactly\n // our number of columns, we end up turning cell padding off (outer if statement). If we assume that\n // cell padding is off and try to fit our number of columns, we find that cell padding is on (inner if statement).\n\n // So instead lets just make sure to show all the columns by using the smaller zoom coefficient:\n zoom = zoom_if_cell_padding_on;\n } else {\n zoom = zoom_if_cell_padding_off;\n }\n } else {\n zoom = zoom_if_cell_padding_on;\n }\n }\n return zoom;\n }\n\n public getHorzZoomToFit(width: number, ids: ColumnId[]) {\n ids = ids || [];\n if (ids.length === 0) {\n return 1;\n }\n const id_to_index_map = this.getVisibleIdToIndexMap();\n const indexes = ids.map(function(id) {\n return id_to_index_map[id];\n });\n let max = Number.NEGATIVE_INFINITY;\n let min = Number.POSITIVE_INFINITY;\n for (let i = 0; i < indexes.length; i++) {\n max = Math.max(indexes[i], max);\n min = Math.min(indexes[i], min);\n }\n return this.getHorzZoomToFitCols(width, min, max + 1);\n }\n\n public getMinHorzZoom() {\n return Math.min(MIN_ZOOM_PIXELS / this.getOncoprintWidth(true), 1);\n }\n\n public getMinVertZoom() {\n // Can't zoom to be smaller than max height\n // That zoom would be z*this.getOncoprintHeight(true) = max_height\n if (this.max_height < Number.POSITIVE_INFINITY) {\n return this.max_height / this.getOncoprintHeight(true);\n } else {\n // if no max height, then cant vert zoom\n return 1;\n }\n }\n\n public setHorzScroll(s: number) {\n this.horz_scroll = Math.max(0, s);\n return this.horz_scroll;\n }\n public setVertScroll(s: number) {\n this.vert_scroll = Math.max(0, s);\n return this.vert_scroll;\n }\n public setScroll(h: number, v: number) {\n this.setHorzScroll(h);\n this.setVertScroll(v);\n }\n public getHorzScroll() {\n return this.horz_scroll;\n }\n public getVertScroll() {\n return this.vert_scroll;\n }\n public setZoom(zoom_x: number, zoom_y: number) {\n this.setHorzZoom(zoom_x);\n this.setVertZoom(zoom_y);\n }\n private setCellPaddingOffBecauseOfZoom(val: boolean) {\n this.cell_padding_off_because_of_zoom = val;\n this.column_left.update();\n }\n public setHorzZoom(z: number) {\n const min_zoom = this.getMinHorzZoom();\n this.horz_zoom = clamp(z, min_zoom, 1);\n this.column_left.update();\n\n if (\n this.getCellWidth() < this.cell_padding_off_cell_width_threshold &&\n !this.cell_padding_off_because_of_zoom\n ) {\n this.setCellPaddingOffBecauseOfZoom(true);\n } else if (\n this.getCellWidth() >= this.cell_padding_off_cell_width_threshold &&\n this.cell_padding_off_because_of_zoom\n ) {\n this.setCellPaddingOffBecauseOfZoom(false);\n }\n return this.horz_zoom;\n }\n\n public getVertZoom() {\n return this.vert_zoom;\n }\n\n public setVertZoom(z: number) {\n const min_zoom = this.getMinVertZoom();\n this.vert_zoom = clamp(z, min_zoom, 1);\n this.track_tops.update();\n return this.vert_zoom;\n }\n\n public setShowTrackLabels(s: boolean) {\n this.show_track_labels = s;\n }\n\n public getShowTrackLabels() {\n return this.show_track_labels;\n }\n\n public hideTrackLegends(track_ids: TrackId[]) {\n track_ids = [].concat(track_ids);\n for (let i = 0; i < track_ids.length; i++) {\n this.getRuleSet(track_ids[i]).exclude_from_legend = true;\n }\n }\n\n public showTrackLegends(track_ids: TrackId[]) {\n track_ids = [].concat(track_ids);\n for (let i = 0; i < track_ids.length; i++) {\n this.getRuleSet(track_ids[i]).exclude_from_legend = false;\n }\n }\n\n private clearTrackActiveRules(track_id: TrackId) {\n const rule_set_id = this.track_rule_set_id[track_id];\n const track_active_rules = this.track_active_rules[track_id];\n const rule_set_active_rules = this.rule_set_active_rules[rule_set_id];\n\n const track_active_rule_ids = Object.keys(track_active_rules).map(x =>\n parseInt(x, 10)\n );\n for (let i = 0; i < track_active_rule_ids.length; i++) {\n const rule_id = track_active_rule_ids[i];\n if (rule_set_active_rules.hasOwnProperty(rule_id)) {\n rule_set_active_rules[rule_id] -= 1;\n if (rule_set_active_rules[rule_id] <= 0) {\n delete rule_set_active_rules[rule_id];\n }\n }\n }\n this.track_active_rules[track_id] = {};\n }\n\n private setTrackActiveRules(track_id: TrackId, active_rules: ActiveRules) {\n this.clearTrackActiveRules(track_id);\n this.track_active_rules[track_id] = active_rules;\n const rule_set_id = this.track_rule_set_id[track_id];\n const rule_set_active_rules = this.rule_set_active_rules[rule_set_id];\n\n const track_active_rule_ids = Object.keys(active_rules).map(x =>\n parseInt(x, 0)\n );\n for (let i = 0; i < track_active_rule_ids.length; i++) {\n const rule_id = track_active_rule_ids[i];\n rule_set_active_rules[rule_id] =\n rule_set_active_rules[rule_id] || 0;\n rule_set_active_rules[rule_id] += 1;\n }\n }\n\n public getTrackUniversalShapes(\n track_id: TrackId,\n use_base_size: boolean\n ): ComputedShapeParams[] {\n const ruleSet = this.getRuleSet(track_id);\n const spacing = this.getTrackHasColumnSpacing(track_id);\n const width =\n this.getCellWidth(use_base_size) +\n (!spacing ? this.getCellPadding(use_base_size, true) : 0);\n const height = this.getCellHeight(track_id, use_base_size);\n\n return ruleSet.getUniversalShapes(width, height);\n }\n\n public getSpecificShapesForData(\n track_id: TrackId,\n use_base_size: boolean\n ): IdentifiedShapeList[] {\n const active_rules = {};\n const data = this.getTrackData(track_id);\n const id_key = this.getTrackDataIdKey(track_id);\n const spacing = this.getTrackHasColumnSpacing(track_id);\n const width =\n this.getCellWidth(use_base_size) +\n (!spacing ? this.getCellPadding(use_base_size, true) : 0);\n const shapes = this.getRuleSet(track_id).getSpecificShapesForDatum(\n data,\n width,\n this.getCellHeight(track_id, use_base_size),\n active_rules,\n id_key,\n this.getTrackImportantIds(track_id)\n );\n\n this.setTrackActiveRules(track_id, active_rules);\n\n return shapes.map(function(\n shape_list: ComputedShapeParams[],\n index: number\n ) {\n return {\n id: data[index][id_key],\n shape_list: shape_list,\n };\n });\n }\n\n public getActiveRules(rule_set_id: RuleSetId) {\n const rule_set_active_rules = this.rule_set_active_rules[rule_set_id];\n if (rule_set_active_rules) {\n return this.rule_sets[rule_set_id]\n .getSpecificRulesForDatum()\n .filter(function(rule_with_id: RuleWithId) {\n return !!rule_set_active_rules[rule_with_id.id];\n });\n } else {\n return [];\n }\n }\n\n public setTrackImportantIds(track_id: TrackId, ids?: ColumnId[]) {\n if (!ids) {\n this.track_important_ids[track_id] = undefined;\n } else {\n this.track_important_ids[track_id] = ids.reduce(function(\n map: ColumnProp<boolean>,\n next_id: ColumnId\n ) {\n map[next_id] = true;\n return map;\n },\n {});\n }\n }\n\n public getTrackImportantIds(track_id: TrackId) {\n return this.track_important_ids[track_id];\n }\n\n public getRuleSets() {\n // return rule sets, in track group legend order\n const self = this;\n const legend_order = this.getTrackGroupLegendOrder();\n const used_track_groups: { [trackGroupIndex: number]: boolean } = {};\n const track_groups = this.getTrackGroups();\n const sorted_track_groups = [];\n for (let i = 0; i < legend_order.length; i++) {\n // add track groups in legend order\n used_track_groups[legend_order[i]] = true;\n if (track_groups[legend_order[i]]) {\n sorted_track_groups.push(track_groups[legend_order[i]]);\n }\n }\n for (let i = 0; i < track_groups.length; i++) {\n // add groups not in legend order to end\n if (!used_track_groups[i] && track_groups[i]) {\n sorted_track_groups.push(track_groups[i]);\n }\n }\n const sorted_tracks: TrackId[] = sorted_track_groups.reduce(function(\n acc: TrackId[],\n next\n ) {\n return acc.concat(next.tracks);\n },\n []);\n const rule_set_ids: number[] = sorted_tracks.map(function(\n track_id: TrackId\n ) {\n return self.track_rule_set_id[track_id];\n });\n const unique_rule_set_ids = arrayUnique(\n rule_set_ids.map(x => x.toString())\n );\n return unique_rule_set_ids.map(function(rule_set_id) {\n return self.rule_sets[parseInt(rule_set_id, 10)];\n });\n }\n\n public getTrackHasColumnSpacing(track_id: TrackId) {\n return !!this.track_has_column_spacing[track_id];\n }\n\n public getGapSize() {\n return this.getCellWidth(true);\n }\n\n public getCellWidth(base?: boolean) {\n return this.cell_width * (base ? 1 : this.horz_zoom);\n }\n\n public getCellHeight(track_id: TrackId, base?: boolean) {\n return this.cell_height[track_id] * (base ? 1 : this.vert_zoom);\n }\n\n public getTrackInfo(track_id: TrackId) {\n return this.track_info[track_id];\n }\n\n public setTrackInfo(track_id: TrackId, msg: string) {\n this.track_info[track_id] = msg;\n }\n\n public getTrackHeight(track_id: TrackId, base?: boolean) {\n return (\n this.getCellHeight(track_id, base) +\n 2 * this.getTrackPadding(track_id, base)\n );\n }\n\n public getTrackPadding(track_id: TrackId, base?: boolean) {\n return this.track_padding[track_id] * (base ? 1 : this.vert_zoom);\n }\n public getBottomPadding() {\n return this.bottom_padding;\n }\n public getTrackSortDirection(track_id: TrackId) {\n return this.track_sort_direction[track_id];\n }\n public setTrackSortDirection(\n track_id: TrackId,\n dir: TrackSortDirection,\n no_callback?: boolean\n ) {\n // see above for dir options\n this.track_sort_direction[track_id] = dir;\n if (!no_callback) {\n this.track_sort_direction_change_callback[track_id](track_id, dir);\n }\n this.precomputed_comparator.update(this, track_id);\n }\n public resetSortableTracksSortDirection(no_callback?: boolean) {\n const allTracks = this.getTracks();\n for (const trackId of allTracks) {\n if (this.isTrackSortDirectionChangeable(trackId)) {\n this.setTrackSortDirection(trackId, 0, no_callback);\n }\n }\n }\n\n public setCellPaddingOn(cell_padding_on: boolean) {\n this.cell_padding_on = cell_padding_on;\n this.column_left.update();\n }\n public getIdOrder(all?: boolean) {\n if (all) {\n return this.id_order; // TODO: should be read-only\n } else {\n return this.visible_id_order.get();\n }\n }\n public getClosestColumnIndexToLeft(\n left: number,\n zoomed?: boolean,\n roundUp?: boolean\n ) {\n const idToLeft = zoomed\n ? this.getZoomedColumnLeft()\n : this.getColumnLeft();\n const ids = this.getIdOrder();\n const lastId = ids[ids.length - 1];\n if (left > idToLeft[lastId] + this.getCellWidth()) {\n return ids.length;\n } else if (left < idToLeft[ids[0]]) {\n return 0;\n } else {\n const index = binarysearch(ids, left, id => idToLeft[id], true);\n const id = ids[index];\n const columnLeft = idToLeft[id];\n if (roundUp && left !== columnLeft) {\n return index + 1;\n } else {\n return index;\n }\n }\n }\n\n public getIdToIndexMap() {\n return this.id_to_index.get();\n }\n public getVisibleIdToIndexMap() {\n return this.visible_id_to_index.get();\n }\n\n public getHiddenIds() {\n const hidden_ids = this.hidden_ids;\n return this.id_order.filter(function(id) {\n return !!hidden_ids[id];\n });\n }\n\n public isSortAffected(\n modified_ids: TrackId | TrackId[],\n group_or_track: 'track' | 'group'\n ) {\n modified_ids = [].concat(modified_ids);\n let group_indexes;\n const self = this;\n if (group_or_track === 'track') {\n group_indexes = modified_ids.map(function(id) {\n return self.getContainingTrackGroupIndex(id);\n });\n } else {\n group_indexes = modified_ids;\n }\n return (\n this.sort_config.type !== 'cluster' ||\n group_indexes.indexOf(this.sort_config.track_group_index) > -1\n );\n }\n\n public setIdOrder(ids: ColumnId[]) {\n this.id_order = ids.slice();\n Object.freeze(this.id_order);\n this.id_to_index.update();\n this.visible_id_order.update(this);\n this.column_left.update();\n }\n\n public hideIds(to_hide: ColumnId[], show_others?: boolean) {\n if (show_others) {\n this.hidden_ids = {};\n }\n for (let j = 0, len = to_hide.length; j < len; j++) {\n this.hidden_ids[to_hide[j]] = true;\n }\n this.visible_id_order.update(this);\n this.column_left.update();\n }\n\n public setHighlightedTracks(track_ids: TrackId[]) {\n this.highlighted_tracks = track_ids;\n }\n\n public getHighlightedTracks() {\n const realTracks = _.keyBy(this.getTracks());\n return this.highlighted_tracks.filter(trackId => trackId in realTracks);\n }\n\n public setHighlightedIds(ids: ColumnId[]) {\n this.highlighted_ids = ids;\n }\n\n public getVisibleHighlightedIds() {\n const visibleIds = this.getVisibleIdToIndexMap();\n return this.highlighted_ids.filter(uid => uid in visibleIds);\n }\n\n public restoreClusteredTrackGroupOrder() {\n if (\n this.sort_config.type === 'cluster' &&\n this.unclustered_track_group_order\n ) {\n const trackGroupIndex = this.sort_config.track_group_index;\n this.setTrackGroupOrder(\n trackGroupIndex,\n this.unclustered_track_group_order\n );\n }\n this.unclustered_track_group_order = undefined;\n }\n\n public setTrackGroupOrder(index: TrackGroupIndex, track_order: TrackId[]) {\n this.track_groups[index].tracks = track_order;\n\n this.track_tops.update();\n }\n\n public moveTrackGroup(\n from_index: TrackGroupIndex,\n to_index: TrackGroupIndex\n ) {\n const new_groups = [];\n const new_headers = [];\n const group_to_move = this.track_groups[from_index];\n for (let i = 0; i < this.track_groups.length; i++) {\n if (i !== from_index && i !== to_index) {\n new_groups.push(this.track_groups[i]);\n }\n if (i === to_index) {\n new_groups.push(group_to_move);\n }\n }\n this.track_groups = new_groups;\n this.track_tops.update();\n return this.track_groups;\n }\n\n public async addTracks(params_list: LibraryTrackSpec<Datum>[]) {\n for (let i = 0; i < params_list.length; i++) {\n const params = params_list[i];\n this.addTrack(params);\n }\n if (this.rendering_suppressed_depth === 0) {\n if (this.keep_sorted) {\n await this.sort();\n }\n }\n this.track_tops.update();\n }\n\n private addTrack(params: LibraryTrackSpec<Datum>) {\n const track_id = params.track_id;\n this.$track_info_tooltip_elt[track_id] = params.$track_info_tooltip_elt;\n this.track_custom_options[track_id] = ifndef(\n params.custom_track_options,\n []\n );\n this.track_label[track_id] = ifndef(params.label, 'Label');\n this.track_sublabel[track_id] = ifndef(params.sublabel, '');\n this.track_label_color[track_id] = ifndef(\n params.track_label_color,\n 'black'\n );\n this.track_label_circle_color[track_id] =\n params.track_label_circle_color;\n this.track_label_font_weight[track_id] = params.track_label_font_weight;\n this.track_label_left_padding[track_id] = ifndef(\n params.track_label_left_padding,\n 0\n );\n this.track_link_url[track_id] = ifndef(params.link_url, null);\n this.track_description[track_id] = ifndef(params.description, '');\n this.cell_height[track_id] = ifndef(params.cell_height, 23);\n this.track_padding[track_id] = ifndef(params.track_padding, 5);\n this.track_has_column_spacing[track_id] = ifndef(\n params.has_column_spacing,\n true\n );\n\n this.track_tooltip_fn[track_id] = ifndef(params.tooltipFn, function(d) {\n return d + '';\n });\n this.track_movable[track_id] = ifndef(params.movable, true);\n this.track_removable[track_id] = ifndef(params.removable, false);\n this.track_remove_callback[track_id] = ifndef(\n params.removeCallback,\n function() {}\n );\n this.track_remove_option_callback[\n track_id\n ] = ifndef(params.onClickRemoveInTrackMenu, function() {});\n\n if (typeof params.expandCallback !== 'undefined') {\n this.track_expand_callback[track_id] = params.expandCallback;\n this.track_expansion_enabled[track_id] = true;\n }\n if (typeof params.expandButtonTextGetter !== 'undefined') {\n this.track_expand_button_getter[track_id] =\n params.expandButtonTextGetter;\n }\n\n this.track_can_show_gaps[track_id] = ifndef(\n params.track_can_show_gaps,\n false\n );\n this.track_show_gaps[track_id] = ifndef(\n params.show_gaps_on_init,\n false\n );\n\n this.track_sort_cmp_fn[track_id] = params.sortCmpFn;\n\n this.track_sort_direction_changeable[track_id] = ifndef(\n params.sort_direction_changeable,\n false\n );\n this.track_sort_direction_change_callback[\n track_id\n ] = ifndef(params.onSortDirectionChange, function() {});\n this.track_data[track_id] = ifndef(params.data, []);\n this.track_data_id_key[track_id] = ifndef(params.data_id_key, 'id');\n\n this.track_info[track_id] = ifndef(params.track_info, '');\n\n if (typeof params.html_label !== 'undefined') {\n this.track_html_label[track_id] = params.html_label;\n }\n\n if (typeof params.rule_set !== 'undefined') {\n this.rule_sets[params.rule_set.rule_set_id] = params.rule_set;\n this.rule_set_active_rules[params.rule_set.rule_set_id] = {};\n this.track_rule_set_id[track_id] = params.rule_set.rule_set_id;\n }\n this.track_active_rules[track_id] = {};\n\n if (params.important_ids) {\n this.setTrackImportantIds(track_id, params.important_ids);\n }\n\n this.track_sort_direction[track_id] = ifndef(\n params.init_sort_direction,\n 1\n );\n\n params.target_group = ifndef(params.target_group, 0);\n this.ensureTrackGroupExists(params.target_group);\n\n // add track to target group\n const group_arrays = [this.track_groups[params.target_group].tracks];\n if (\n this.sort_config.type === 'cluster' &&\n this.sort_config.track_group_index === params.target_group\n ) {\n // if target group is clustered, also add track to unclustered order\n group_arrays.push(this.unclustered_track_group_order);\n }\n for (const group_array of group_arrays) {\n const target_index =\n params.expansion_of !== undefined\n ? group_array.indexOf(\n this.getLastExpansion(params.expansion_of)\n ) + 1\n : group_array.length;\n group_array.splice(target_index, 0, track_id);\n }\n\n if (params.expansion_of !== undefined) {\n if (\n !this.track_expansion_tracks.hasOwnProperty(params.expansion_of)\n ) {\n this.track_expansion_tracks[params.expansion_of] = [];\n }\n if (\n this.track_expansion_tracks[params.expansion_of].indexOf(\n track_id\n ) !== -1\n ) {\n throw new Error('Illegal state: duplicate expansion track ID');\n }\n this.track_expansion_parent[track_id] = params.expansion_of;\n this.track_expansion_tracks[params.expansion_of].push(track_id);\n }\n\n this.track_id_to_datum.update(this, track_id);\n this.track_present_ids.update(this, track_id);\n this.precomputed_comparator.update(this, track_id);\n }\n\n public getAllIds() {\n return Object.keys(this.present_ids.get());\n }\n\n public async releaseRendering() {\n if (this.keep_sorted) {\n await this.sort();\n } else {\n this.setIdOrder(Object.keys(this.present_ids.get()));\n }\n this.track_tops.update();\n }\n\n private ensureTrackGroupExists(index: TrackGroupIndex) {\n while (index >= this.track_groups.length) {\n this.track_groups.push({ tracks: [] });\n }\n }\n\n // get a reference to the array that stores the order of tracks in\n // the same group\n private _getMajorTrackGroup(\n track_id: TrackId,\n return_index: true\n ): number | null;\n private _getMajorTrackGroup(\n track_id: TrackId,\n return_index?: false\n ): TrackGroup | null;\n private _getMajorTrackGroup(track_id: TrackId, return_index?: boolean) {\n let group;\n let i;\n for (i = 0; i < this.track_groups.length; i++) {\n if (this.track_groups[i].tracks.indexOf(track_id) > -1) {\n group = this.track_groups[i];\n break;\n }\n }\n if (group) {\n return return_index ? i : group;\n } else {\n return null;\n }\n }\n // get an array listing the track IDs that a track can move around\n private _getEffectiveTrackGroupTracks(track_id: TrackId) {\n const self = this;\n let group,\n parent_id = this.track_expansion_parent[track_id];\n if (parent_id === undefined) {\n group = (function(major_group: TrackGroup) {\n return major_group === null\n ? null\n : major_group.tracks.filter(function(sibling_id) {\n return (\n self.track_expansion_parent[sibling_id] ===\n undefined\n );\n });\n })(this._getMajorTrackGroup(track_id) as TrackGroup);\n } else {\n group = this.track_expansion_tracks[parent_id];\n }\n return group ? group.slice() : null;\n }\n\n private isRuleSetUsed(rule_set_id: RuleSetId) {\n let used = false;\n const tracks = this.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n if (this.track_rule_set_id[tracks[i]] === rule_set_id) {\n used = true;\n break;\n }\n }\n return used;\n }\n\n private removeRuleSet(rule_set_id: RuleSetId) {\n delete this.rule_sets[rule_set_id];\n delete this.rule_set_active_rules[rule_set_id];\n }\n\n public removeTrack(track_id: TrackId) {\n const rule_set_id = this.track_rule_set_id[track_id];\n\n // subtract this tracks active rules from usage count,\n // so that we don't show unused rules in the legend\n this.clearTrackActiveRules(track_id);\n\n this.track_remove_callback[track_id](track_id);\n\n delete this.track_data[track_id];\n delete this.track_rule_set_id[track_id];\n delete this.track_label[track_id];\n delete this.track_link_url[track_id];\n delete this.cell_height[track_id];\n delete this.track_padding[track_id];\n delete this.track_data_id_key[track_id];\n delete this.track_tooltip_fn[track_id];\n delete this.track_movable[track_id];\n delete this.track_removable[track_id];\n delete this.track_remove_callback[track_id];\n delete this.track_sort_cmp_fn[track_id];\n delete this.track_sort_direction_changeable[track_id];\n delete this.track_sort_direction[track_id];\n delete this.track_info[track_id];\n delete this.track_has_column_spacing[track_id];\n delete this.track_expansion_enabled[track_id];\n delete this.track_expand_callback[track_id];\n delete this.track_expand_button_getter[track_id];\n delete this.track_expansion_tracks[track_id];\n delete this.track_label_circle_color[track_id];\n delete this.track_label_font_weight[track_id];\n delete this.track_label_left_padding[track_id];\n\n const containing_track_group = this._getMajorTrackGroup(\n track_id\n ) as TrackGroup;\n if (containing_track_group !== null) {\n containing_track_group.tracks.splice(\n containing_track_group.tracks.indexOf(track_id),\n 1\n );\n }\n // remove listing of the track as an expansion of its parent track\n const expansion_group = this.track_expansion_tracks[\n this.track_expansion_parent[track_id]\n ];\n if (expansion_group) {\n expansion_group.splice(expansion_group.indexOf(track_id), 1);\n }\n // remove this track from unclustered order\n if (\n this.unclustered_track_group_order &&\n this.unclustered_track_group_order.indexOf(track_id) > -1\n ) {\n this.unclustered_track_group_order.splice(\n this.unclustered_track_group_order.indexOf(track_id),\n 1\n );\n }\n delete this.track_expansion_parent[track_id];\n this.track_tops.update();\n this.track_present_ids.update(this, track_id);\n this.track_id_to_datum.update(this, track_id);\n this.ids_after_a_gap.update(this);\n this.setIdOrder(Object.keys(this.present_ids.get()));\n\n // delete rule set if its now unused\n const rule_set_used = this.isRuleSetUsed(rule_set_id);\n if (!rule_set_used) {\n this.removeRuleSet(rule_set_id);\n }\n }\n\n public getOverlappingCells(\n x: number,\n y: number\n ): TrackOverlappingCells | null {\n // First, see if it's in a column\n const id_order = this.getIdOrder();\n const zoomed_column_left = this.getZoomedColumnLeft() as ColumnProp<\n number\n >;\n // this gets the nearest lower index\n const nearest_id_index = binarysearch(\n id_order,\n x,\n function(id) {\n return zoomed_column_left[id];\n },\n true\n );\n if (nearest_id_index === -1) {\n return null;\n }\n\n // Next, see if it's in a track\n const tracks = this.getTracks();\n const cell_tops = this.getCellTops() as TrackProp<number>;\n const nearest_track_index = binarysearch(\n tracks,\n y,\n function(track) {\n return cell_tops[track];\n },\n true\n );\n if (nearest_track_index === -1) {\n return null;\n }\n const nearest_track = tracks[nearest_track_index];\n if (y >= cell_tops[nearest_track] + this.getCellHeight(nearest_track)) {\n // we know y is past the top of the track (>= cell_tops[nearest_track]), so this checks if y is past the bottom of the track\n return null;\n }\n\n // At this point, we know y is inside a track\n\n // Finally, return all ids within 1 px of x to the right\n const ids = [];\n let hitzone_width = this.getCellWidth();\n if (!this.getTrackHasColumnSpacing(nearest_track)) {\n hitzone_width += this.getCellPadding();\n }\n for (let i = nearest_id_index; i < id_order.length; i++) {\n // if hitzone of cell touches the pixel [x,x+1), then include it\n if (\n doesCellIntersectPixel(\n [\n zoomed_column_left[id_order[i]],\n zoomed_column_left[id_order[i]] + hitzone_width,\n ],\n x\n )\n ) {\n ids.push(id_order[i]);\n } else if (zoomed_column_left[id_order[i]] > x + 1) {\n break;\n }\n }\n if (ids.length > 0) {\n return {\n ids: ids,\n track: nearest_track,\n top: cell_tops[nearest_track],\n left: zoomed_column_left[ids[0]],\n };\n }\n return null;\n }\n\n public getTrackDatum(track_id: TrackId, id: ColumnId) {\n const datumById = this.track_id_to_datum.get()[track_id];\n if (!datumById) {\n return null;\n }\n\n return datumById[id] || null;\n }\n\n public getTrackTops(): TrackProp<number>;\n public getTrackTops(desired_track_id: TrackId): number;\n public getTrackTops(desired_track_id?: TrackId) {\n if (typeof desired_track_id === 'undefined') {\n return copyShallowObject(this.track_tops.get());\n } else {\n return this.track_tops.get()[desired_track_id];\n }\n }\n\n public getZoomedTrackTops(): TrackProp<number>;\n public getZoomedTrackTops(desired_track_id: TrackId): number;\n public getZoomedTrackTops(desired_track_id?: TrackId) {\n if (typeof desired_track_id === 'undefined') {\n return copyShallowObject(this.track_tops_zoomed.get());\n } else {\n return this.track_tops_zoomed.get()[desired_track_id];\n }\n }\n\n public getZoomedHeaderTops(): TrackGroupProp<number>;\n public getZoomedHeaderTops(track_group_index: TrackGroupIndex): number;\n public getZoomedHeaderTops(track_group_index?: TrackGroupIndex) {\n if (typeof track_group_index === 'undefined') {\n return copyShallowObject(this.header_tops_zoomed.get());\n } else {\n return this.header_tops_zoomed.get()[track_group_index];\n }\n }\n\n public getCellTops(\n desired_track_id?: undefined,\n base?: boolean\n ): TrackProp<number>;\n public getCellTops(desired_track_id: TrackId, base?: boolean): number;\n public getCellTops(desired_track_id?: TrackId, base?: boolean) {\n if (typeof desired_track_id === 'undefined') {\n return copyShallowObject(\n (base ? this.cell_tops : this.cell_tops_zoomed).get()\n );\n } else {\n return (base ? this.cell_tops : this.cell_tops_zoomed).get()[\n desired_track_id\n ];\n }\n }\n\n public getLabelTops(): TrackProp<number>;\n public getLabelTops(desired_track_id: TrackId): number;\n public getLabelTops(desired_track_id?: TrackId, base?: boolean) {\n if (typeof desired_track_id === 'undefined') {\n return copyShallowObject(\n (base ? this.label_tops : this.label_tops_zoomed).get()\n );\n } else {\n return (base ? this.label_tops : this.label_tops_zoomed).get()[\n desired_track_id\n ];\n }\n }\n\n public getContainingTrackGroup(track_id: TrackId) {\n return this._getEffectiveTrackGroupTracks(track_id);\n }\n\n public getContainingTrackGroupIndex(track_id: TrackId) {\n return this._getMajorTrackGroup(track_id, true);\n }\n\n public getTrackGroups() {\n // TODO: make read-only\n return this.track_groups;\n }\n\n public getTracks() {\n const ret = [];\n for (let i = 0; i < this.track_groups.length; i++) {\n ret.push(...this.track_groups[i].tracks);\n }\n return ret;\n }\n\n public getColumnLeft(): ColumnProp<number>;\n public getColumnLeft(id: ColumnId): number;\n public getColumnLeft(id?: ColumnId) {\n if (typeof id === 'undefined') {\n return this.column_left.get();\n } else {\n return this.column_left.get()[id];\n }\n }\n\n public getColumnLeftNoPadding(): ColumnProp<number>;\n public getColumnLeftNoPadding(id: ColumnId): number;\n public getColumnLeftNoPadding(id?: ColumnId) {\n if (typeof id === 'undefined') {\n return this.column_left_no_padding.get();\n } else {\n return this.column_left_no_padding.get()[id];\n }\n }\n\n public getZoomedColumnLeft(): ColumnProp<number>;\n public getZoomedColumnLeft(id: ColumnId): number;\n public getZoomedColumnLeft(id?: ColumnId) {\n if (typeof id === 'undefined') {\n return this.zoomed_column_left.get();\n } else {\n return this.zoomed_column_left.get()[id];\n }\n }\n\n public getOncoprintHeight(base?: boolean) {\n const tracks = this.getTracks();\n const last_track = tracks[tracks.length - 1];\n return (\n (base\n ? (this.getTrackTops(last_track) as number)\n : (this.getZoomedTrackTops(last_track) as number)) +\n this.getTrackHeight(last_track, base) +\n this.getBottomPadding()\n );\n }\n\n public getOncoprintWidth(base?: boolean) {\n const idOrder = this.getIdOrder();\n const lastId = idOrder[idOrder.length - 1];\n const lastIdLeft = base\n ? this.getColumnLeft(lastId)\n : this.getZoomedColumnLeft(lastId);\n return lastIdLeft + this.getCellWidth(base) + 1; // this fixes some edge case issues with scrolling\n }\n\n public getOncoprintWidthNoColumnPaddingNoGaps() {\n return this.getIdOrder().length * this.getCellWidth(true);\n }\n\n public getColumnLabels() {\n return this.column_labels;\n }\n\n public setColumnLabels(labels: ColumnProp<ColumnLabel>) {\n this.column_labels = labels;\n }\n\n public moveTrack(track_id: TrackId, new_previous_track: TrackId) {\n function moveContiguousValues<T>(\n uniqArray: T[],\n first_value: T,\n last_value: T,\n new_predecessor: T\n ) {\n const old_start_index = uniqArray.indexOf(first_value),\n old_end_index = uniqArray.indexOf(last_value);\n const values = uniqArray.slice(old_start_index, old_end_index + 1);\n uniqArray.splice(old_start_index, values.length);\n const new_position =\n new_predecessor === null\n ? 0\n : uniqArray.indexOf(new_predecessor) + 1;\n uniqArray.splice\n .bind(uniqArray, new_position, 0)\n .apply(null, values);\n }\n\n const track_group = this._getMajorTrackGroup(track_id) as TrackGroup,\n expansion_parent = this.track_expansion_parent[track_id];\n\n let flat_previous_track;\n\n if (track_group !== null) {\n // if an expansion track moves above all other tracks it can,\n // place it directly below its expansion parent\n if (expansion_parent !== undefined && new_previous_track === null) {\n flat_previous_track = expansion_parent;\n // otherwise, place the track under (the last expansion track of)\n // its sibling\n } else {\n flat_previous_track = this.getLastExpansion(new_previous_track);\n }\n moveContiguousValues(\n track_group.tracks,\n track_id,\n this.getLastExpansion(track_id),\n flat_previous_track\n );\n }\n\n // keep the order of expansion siblings up-to-date as well\n if (this.track_expansion_parent[track_id] !== undefined) {\n moveContiguousValues(\n this.track_expansion_tracks[expansion_parent],\n track_id,\n track_id,\n new_previous_track\n );\n }\n\n this.track_tops.update();\n }\n\n public getTrackLabel(track_id: TrackId) {\n return this.track_label[track_id];\n }\n\n public getTrackSublabel(track_id: TrackId) {\n return this.track_sublabel[track_id];\n }\n\n public getShowTrackSublabels() {\n return this.show_track_sublabels;\n }\n\n public setShowTrackSublabels(show: boolean) {\n return (this.show_track_sublabels = show);\n }\n\n public getTrackLabelColor(track_id: TrackId) {\n return this.track_label_color[track_id];\n }\n\n public getTrackLabelCircleColor(track_id: TrackId) {\n return this.track_label_circle_color[track_id];\n }\n\n public getTrackLabelFontWeight(track_id: TrackId) {\n return this.track_label_font_weight[track_id];\n }\n\n public getTrackLabelLeftPadding(track_id: TrackId) {\n return this.track_label_left_padding[track_id];\n }\n\n public getOptionalHtmlTrackLabel(track_id: TrackId) {\n return this.track_html_label[track_id];\n }\n\n public getTrackLinkUrl(track_id: TrackId) {\n return this.track_link_url[track_id];\n }\n\n public getTrackDescription(track_id: TrackId) {\n return this.track_description[track_id];\n }\n\n public getTrackTooltipFn(track_id: TrackId) {\n return this.track_tooltip_fn[track_id];\n }\n public setTrackTooltipFn(\n track_id: TrackId,\n tooltipFn: TrackTooltipFn<Datum>\n ) {\n this.track_tooltip_fn[track_id] = tooltipFn;\n }\n\n public getTrackDataIdKey(track_id: TrackId) {\n return this.track_data_id_key[track_id];\n }\n\n public getTrackGroupPadding(base?: boolean) {\n return this.track_group_padding * (base ? 1 : this.vert_zoom);\n }\n\n public isTrackRemovable(track_id: TrackId) {\n return this.track_removable[track_id];\n }\n\n public getTrackRemoveOptionCallback(track_id: TrackId) {\n return this.track_remove_option_callback[track_id];\n }\n\n public isTrackSortDirectionChangeable(track_id: TrackId) {\n return this.track_sort_direction_changeable[track_id];\n }\n\n public isTrackExpandable(track_id: TrackId) {\n // return true if the flag is defined and true\n return Boolean(this.track_expansion_enabled[track_id]);\n }\n\n public expandTrack(track_id: TrackId) {\n return this.track_expand_callback[track_id](track_id);\n }\n\n public disableTrackExpansion(track_id: TrackId) {\n this.track_expansion_enabled[track_id] = false;\n }\n\n public enableTrackExpansion(track_id: TrackId) {\n if (!this.track_expand_callback.hasOwnProperty(track_id)) {\n throw new Error(\"Track '\" + track_id + \"' has no expandCallback\");\n }\n this.track_expansion_enabled[track_id] = true;\n }\n\n public isTrackExpanded(track_id: TrackId) {\n return (\n this.track_expansion_tracks.hasOwnProperty(track_id) &&\n this.track_expansion_tracks[track_id].length > 0\n );\n }\n\n public getExpandButtonText(track_id: TrackId) {\n const self = this;\n const getExpandButtonFunction = function(track_id: TrackId) {\n return (\n self.track_expand_button_getter[track_id] ||\n function(is_expanded) {\n return is_expanded ? 'Expand more' : 'Expand';\n }\n );\n };\n return getExpandButtonFunction(track_id)(\n this.isTrackExpanded(track_id)\n );\n }\n\n /**\n * Checks if one track is the expansion of another\n *\n * @param {number} expansion_track_id - the ID of the track to check\n * @param {number} set_track_id - the ID of the track it may be an expansion of\n */\n public isExpansionOf(expansion_track_id: TrackId, set_track_id: TrackId) {\n return (\n this.track_expansion_tracks.hasOwnProperty(set_track_id) &&\n this.track_expansion_tracks[set_track_id].indexOf(\n expansion_track_id\n ) !== -1\n );\n }\n\n /**\n * Finds the bottom-most track in a track's expansion group\n *\n * @param track_id - the ID of the track to start from\n * @returns the ID of its last expansion, or the unchanged param if none\n */\n public getLastExpansion(track_id: TrackId) {\n let direct_children = this.track_expansion_tracks[track_id];\n while (direct_children && direct_children.length) {\n track_id = direct_children[direct_children.length - 1];\n direct_children = this.track_expansion_tracks[track_id];\n }\n return track_id;\n }\n\n public getTrackCustomOptions(track_id: TrackId) {\n return this.track_custom_options[track_id];\n }\n\n public setTrackCustomOptions(\n track_id: TrackId,\n options: CustomTrackOption[] | undefined\n ) {\n this.track_custom_options[track_id] = options;\n }\n\n public setTrackInfoTooltip(\n track_id: TrackId,\n $tooltip_elt: JQuery | undefined\n ) {\n this.$track_info_tooltip_elt[track_id] = $tooltip_elt;\n }\n\n public $getTrackInfoTooltip(track_id: TrackId) {\n return this.$track_info_tooltip_elt[track_id];\n }\n\n public getRuleSet(track_id: TrackId) {\n return this.rule_sets[this.track_rule_set_id[track_id]];\n }\n\n public shareRuleSet(source_track_id: TrackId, target_track_id: TrackId) {\n this.setTrackActiveRules(target_track_id, {});\n\n const old_rule_set_id = this.track_rule_set_id[target_track_id];\n this.track_rule_set_id[target_track_id] = this.track_rule_set_id[\n source_track_id\n ];\n if (!this.isRuleSetUsed(old_rule_set_id)) {\n this.removeRuleSet(old_rule_set_id);\n }\n }\n\n public setRuleSet(track_id: TrackId, rule_set: RuleSet) {\n this.setTrackActiveRules(track_id, {});\n\n const curr_rule_set_id = this.track_rule_set_id[track_id];\n this.rule_sets[rule_set.rule_set_id] = rule_set;\n this.rule_set_active_rules[rule_set.rule_set_id] = {};\n this.track_rule_set_id[track_id] = rule_set.rule_set_id;\n\n const rule_set_used = this.isRuleSetUsed(curr_rule_set_id);\n if (!rule_set_used) {\n this.removeRuleSet(curr_rule_set_id);\n }\n }\n\n public getTrackSortComparator(track_id: TrackId) {\n return this.track_sort_cmp_fn[track_id];\n }\n\n public setTrackSortComparator(\n track_id: TrackId,\n sortCmpFn: TrackSortSpecification<Datum>\n ) {\n this.track_sort_cmp_fn[track_id] = sortCmpFn;\n this.precomputed_comparator.update(this, track_id);\n }\n\n public getTrackData(track_id: TrackId) {\n return this.track_data[track_id];\n }\n\n public clusterTrackGroup(\n track_group_index: TrackGroupIndex,\n clusterValueFn: (d: Datum) => number\n ): Promise<void | ClusterSortResult> {\n const sort_config_at_call = cloneShallow(this.sort_config);\n // Prepare input\n const self = this;\n //@ts-ignore\n const def = new $.Deferred();\n const cluster_input: ColumnProp<TrackProp<number>> = {};\n\n // Use data from tracks on the same level of expansion as the first one\n // in the track group as input, i.e. the outer level excluding any\n // expansions\n const track_group = this.getTrackGroups()[track_group_index];\n let track_ids: TrackId[] = [];\n if (track_group !== undefined) {\n track_ids =\n this._getEffectiveTrackGroupTracks(track_group.tracks[0]) || [];\n }\n for (let i = 0; i < track_ids.length; i++) {\n const track_id = track_ids[i];\n const data_id_key = this.getTrackDataIdKey(track_id);\n const data = this.getTrackData(track_id);\n for (let j = 0; j < data.length; j++) {\n const id = data[j][data_id_key];\n const value = clusterValueFn(data[j]);\n cluster_input[id] = cluster_input[id] || {};\n cluster_input[id][track_id] = value;\n }\n }\n if (!Object.keys(cluster_input).length) {\n // skip clustering if there's nothing to cluster\n return def.resolve().promise();\n }\n\n // unset sorting by tracks in this group\n /*track_group.forEach(function (track_id) {\n self.setTrackSortDirection(track_id, 0, true);\n });*/\n\n //do hierarchical clustering in background:\n $.when(hclusterColumns(cluster_input), hclusterTracks(cluster_input))\n .then(function(\n columnClusterOrder: CaseItem[],\n trackClusterOrder: EntityItem[]\n ) {\n // cancel if sort config is no longer what it was\n if (!_.isEqual(self.sort_config, sort_config_at_call)) {\n return;\n }\n // set clustered column order\n self.setIdOrder(\n columnClusterOrder.map(function(c) {\n return c.caseId;\n })\n ); // TODO\n // determine clustered row order\n const clustered_track_id_order = trackClusterOrder.map(function(\n entity\n ) {\n // TODO\n return parseInt(entity.entityId, 10);\n });\n // re-insert any expansions below each clustered track\n const full_track_id_order: TrackId[] = [];\n clustered_track_id_order.forEach(function(track_id: TrackId) {\n full_track_id_order.push(track_id);\n Array.prototype.push.apply(\n full_track_id_order,\n self.track_expansion_tracks[track_id] || []\n );\n });\n if (!self.unclustered_track_group_order) {\n // save pre-clustered order if it isn't already saved\n self.unclustered_track_group_order = track_ids;\n }\n def.resolve({\n track_group_index: track_group_index,\n track_id_order: full_track_id_order,\n });\n })\n .fail(function() {\n def.reject();\n });\n return def.promise();\n }\n\n /**\n * Sets the data for an Oncoprint track.\n *\n * @param track_id - the ID that identifies the track\n * @param {Object[]} data - the list of data for the cells\n * @param {string} data_id_key - name of the property of the\n * data objects to use as the (column) key\n */\n public setTrackData(\n track_id: TrackId,\n data: Datum[],\n data_id_key: string & keyof Datum\n ) {\n this.track_data[track_id] = data;\n this.track_data_id_key[track_id] = data_id_key;\n this.track_id_to_datum.update(this, track_id);\n this.track_present_ids.update(this, track_id);\n this.setIdOrder(Object.keys(this.present_ids.get()));\n this.precomputed_comparator.update(this, track_id);\n }\n\n public setTrackGroupLegendOrder(group_order: TrackGroupIndex[]) {\n this.track_group_legend_order = group_order.slice();\n }\n\n public getTrackGroupLegendOrder() {\n return this.track_group_legend_order;\n }\n\n public setTrackGroupSortPriority(priority: TrackGroupIndex[]) {\n this.track_group_sort_priority = priority;\n this.sort();\n }\n private sortAlphabetical() {\n const id_order = this.getIdOrder(true).slice();\n id_order.sort(function(a, b) {\n return a.localeCompare(b);\n });\n this.setIdOrder(id_order);\n }\n private sortByTracks() {\n const track_group_sort_priority = this.track_group_sort_priority;\n const track_groups = this.getTrackGroups();\n let track_groups_in_sort_order: TrackGroup[];\n\n if (track_group_sort_priority.length < track_groups.length) {\n track_groups_in_sort_order = track_groups;\n } else {\n track_groups_in_sort_order = track_group_sort_priority.map(function(\n x\n ) {\n return track_groups[x];\n });\n }\n\n const track_sort_priority: TrackId[] = track_groups_in_sort_order.reduce(\n function(acc: TrackId[], next) {\n return acc.concat(next.tracks);\n },\n []\n );\n\n const precomputed_comparator = this.precomputed_comparator.get();\n function getVector(id: ColumnId) {\n const mandatory_values = [];\n const preferred_values = [];\n for (let i = 0; i < track_sort_priority.length; i++) {\n const sort_value = precomputed_comparator[\n track_sort_priority[i]\n ].getSortValue(id);\n mandatory_values.push(sort_value.mandatory);\n preferred_values.push(sort_value.preferred);\n }\n return mandatory_values.concat(preferred_values);\n }\n\n const ids_with_vectors = this.getAllIds().map(function(id) {\n return {\n id: id,\n vector: getVector(id),\n };\n });\n const order = BucketSort.bucketSort(ids_with_vectors, function(d: {\n id: ColumnId;\n vector: (string | number)[];\n }) {\n return d.vector;\n });\n this.setIdOrder(\n order.map(function(d: {\n id: ColumnId;\n vector: (string | number)[];\n }) {\n return d.id;\n })\n );\n }\n public sort(): Promise<void | ClusterSortResult> {\n //@ts-ignore\n const def = new $.Deferred();\n this.sort_config = this.sort_config || {};\n if (this.sort_config.type === 'alphabetical') {\n this.sortAlphabetical();\n def.resolve();\n } else if (this.sort_config.type === 'order') {\n this.setIdOrder(this.sort_config.order);\n def.resolve();\n } else if (this.sort_config.type === 'cluster') {\n this.clusterTrackGroup(\n this.sort_config.track_group_index,\n this.sort_config.clusterValueFn\n ).then(function(x) {\n def.resolve(x);\n });\n } else {\n this.sortByTracks();\n def.resolve();\n }\n return def.promise();\n }\n\n public setSortConfig(params: SortConfig) {\n if (\n this.sort_config.type === 'cluster' &&\n (params.type !== 'cluster' ||\n params.track_group_index !== this.sort_config.track_group_index)\n ) {\n // restore order of currently clustered track group if it will no longer be clustered\n this.restoreClusteredTrackGroupOrder();\n }\n this.sort_config = params;\n }\n\n public getTrackMovable(track_id: TrackId) {\n return this.track_movable[track_id];\n }\n\n public setTrackMovable(track_id: TrackId, movable: boolean) {\n this.track_movable[track_id] = movable;\n }\n\n public isTrackInClusteredGroup(track_id: TrackId) {\n return (\n this.sort_config.type === 'cluster' &&\n this.sort_config.track_group_index ===\n this.getContainingTrackGroupIndex(track_id)\n );\n }\n}\n","export default function makesvgelement(tag: string, attrs: any) {\n const el = document.createElementNS('http://www.w3.org/2000/svg', tag);\n for (const k in attrs) {\n if (k in attrs) {\n el.setAttribute(k, attrs[k]);\n }\n }\n return el;\n}\n","import { fastParseInt16 } from './utils';\nimport { RGBAColor } from './oncoprintruleset';\n\nexport default function extractrgba(str: string): RGBAColor {\n if (str[0] === '#') {\n // hex, convert to rgba\n return hexToRGBA(str);\n }\n const match = str.match(\n /^[\\s]*rgba\\([\\s]*([0-9.]+)[\\s]*,[\\s]*([0-9.]+)[\\s]*,[\\s]*([0-9.]+)[\\s]*,[\\s]*([0-9.]+)[\\s]*\\)[\\s]*$/\n );\n if (match && match.length === 5) {\n return [\n parseFloat(match[1]) / 255,\n parseFloat(match[2]) / 255,\n parseFloat(match[3]) / 255,\n parseFloat(match[4]),\n ];\n }\n throw `could not extract rgba from ${str}`;\n}\n\nexport function hexToRGBA(str: string): RGBAColor {\n const r = fastParseInt16(str[1] + str[2]);\n const g = fastParseInt16(str[3] + str[4]);\n const b = fastParseInt16(str[5] + str[6]);\n return [r, g, b, 1];\n}\n\nexport function rgbaToHex(rgba: RGBAColor): string {\n let hexR = rgba[0].toString(16);\n let hexG = rgba[1].toString(16);\n let hexB = rgba[2].toString(16);\n if (hexR.length === 1) {\n hexR = '0' + hexR;\n }\n if (hexG.length === 1) {\n hexG = '0' + hexG;\n }\n if (hexB.length === 1) {\n hexB = '0' + hexB;\n }\n return `#${hexR}${hexG}${hexB}`;\n}\n","import makeSVGElement from './makesvgelement';\nimport extractRGBA from './extractrgba';\nimport {\n ComputedEllipseParams,\n ComputedLineParams,\n ComputedRectangleParams,\n ComputedShapeParams,\n ComputedTriangleParams,\n} from './oncoprintshape';\nimport { rgbString } from './utils';\n\nfunction extractColor(str: string) {\n if (str.indexOf('rgb(') > -1) {\n return {\n rgb: str,\n opacity: 1,\n };\n }\n const rgba_arr = extractRGBA(str);\n return {\n rgb:\n 'rgb(' +\n rgba_arr[0] * 255 +\n ',' +\n rgba_arr[1] * 255 +\n ',' +\n rgba_arr[2] * 255 +\n ')',\n opacity: rgba_arr[3],\n };\n}\n\nfunction rectangleToSVG(\n params: ComputedRectangleParams,\n offset_x: number,\n offset_y: number\n) {\n return makeSVGElement('rect', {\n width: params.width,\n height: params.height,\n x: params.x + offset_x,\n y: params.y + offset_y,\n stroke: rgbString(params.stroke),\n 'stroke-opacity': params.stroke[3],\n 'stroke-width': params['stroke-width'],\n fill: rgbString(params.fill),\n 'fill-opacity': params.fill[3],\n });\n}\n\nfunction triangleToSVG(\n params: ComputedTriangleParams,\n offset_x: number,\n offset_y: number\n) {\n return makeSVGElement('polygon', {\n points: [\n [params.x1 + offset_x, params.y1 + offset_y],\n [params.x2 + offset_x, params.y2 + offset_y],\n [params.x3 + offset_x, params.y3 + offset_y],\n ]\n .map(function(a) {\n return a[0] + ',' + a[1];\n })\n .join(' '),\n stroke: rgbString(params.stroke),\n 'stroke-opacity': params.stroke[3],\n 'stroke-width': params['stroke-width'],\n fill: rgbString(params.fill),\n 'fill-opacity': params.fill[3],\n });\n}\n\nfunction ellipseToSVG(\n params: ComputedEllipseParams,\n offset_x: number,\n offset_y: number\n) {\n return makeSVGElement('ellipse', {\n rx: params.width / 2,\n height: params.height / 2,\n cx: params.x + offset_x,\n cy: params.y + offset_y,\n stroke: rgbString(params.stroke),\n 'stroke-opacity': params.stroke[3],\n 'stroke-width': params['stroke-width'],\n fill: rgbString(params.fill),\n 'fill-opacity': params.fill[3],\n });\n}\n\nfunction lineToSVG(\n params: ComputedLineParams,\n offset_x: number,\n offset_y: number\n) {\n return makeSVGElement('line', {\n x1: params.x1 + offset_x,\n y1: params.y1 + offset_y,\n x2: params.x2 + offset_x,\n y2: params.y2 + offset_y,\n stroke: rgbString(params.stroke),\n 'stroke-opacity': params.stroke[3],\n 'stroke-width': params['stroke-width'],\n });\n}\n\nexport default function shapeToSVG(\n oncoprint_shape_computed_params: ComputedShapeParams,\n offset_x: number,\n offset_y: number\n) {\n var type = oncoprint_shape_computed_params.type;\n if (type === 'rectangle') {\n return rectangleToSVG(\n oncoprint_shape_computed_params as ComputedRectangleParams,\n offset_x,\n offset_y\n );\n } else if (type === 'triangle') {\n return triangleToSVG(\n oncoprint_shape_computed_params as ComputedTriangleParams,\n offset_x,\n offset_y\n );\n } else if (type === 'ellipse') {\n return ellipseToSVG(\n oncoprint_shape_computed_params as ComputedEllipseParams,\n offset_x,\n offset_y\n );\n } else if (type === 'line') {\n return lineToSVG(\n oncoprint_shape_computed_params as ComputedLineParams,\n offset_x,\n offset_y\n );\n }\n return undefined;\n}\n","import makeSVGElement from './makesvgelement';\nimport shapeToSVG from './oncoprintshapetosvg';\nimport { ComputedShapeParams } from './oncoprintshape';\nimport { RGBAColor } from './oncoprintruleset';\nimport { rgbString } from './utils';\n\nfunction makeIdCounter() {\n let id = 0;\n return function() {\n id += 1;\n return id;\n };\n}\n\nconst gradientId = makeIdCounter();\n\nexport default {\n text: function(\n content: string,\n x?: number,\n y?: number,\n size?: number,\n family?: string,\n weight?: string,\n alignment_baseline?: string,\n fill?: string,\n text_decoration?: string\n ) {\n size = size || 12;\n var alignment_baseline_y_offset = size;\n if (alignment_baseline === 'middle') {\n alignment_baseline_y_offset = size / 2;\n } else if (alignment_baseline === 'bottom') {\n alignment_baseline_y_offset = 0;\n }\n var elt = makeSVGElement('text', {\n x: x || 0,\n y: (y || 0) + alignment_baseline_y_offset,\n 'font-size': size,\n 'font-family': family || 'serif',\n 'font-weight': weight || 'normal',\n 'text-anchor': 'start',\n fill: fill,\n 'text-decoration': text_decoration,\n });\n elt.textContent = content + '';\n return elt as SVGTextElement;\n },\n group: function(x: number | undefined, y: number | undefined) {\n x = x || 0;\n y = y || 0;\n return makeSVGElement('g', {\n transform: 'translate(' + x + ',' + y + ')',\n }) as SVGGElement;\n },\n svg: function(width: number | undefined, height: number | undefined) {\n return makeSVGElement('svg', {\n width: width || 0,\n height: height || 0,\n }) as SVGSVGElement;\n },\n wrapText: function(in_dom_text_svg_elt: SVGTextElement, width: number) {\n const text = in_dom_text_svg_elt.textContent;\n in_dom_text_svg_elt.textContent = '';\n\n const words = text.split(' ');\n let dy = 0;\n let tspan = makeSVGElement('tspan', {\n x: '0',\n dy: dy,\n }) as SVGTSpanElement;\n in_dom_text_svg_elt.appendChild(tspan);\n\n let curr_tspan_words: string[] = [];\n for (var i = 0; i < words.length; i++) {\n curr_tspan_words.push(words[i]);\n tspan.textContent = curr_tspan_words.join(' ');\n if (tspan.getComputedTextLength() > width) {\n tspan.textContent = curr_tspan_words\n .slice(0, curr_tspan_words.length - 1)\n .join(' ');\n dy = in_dom_text_svg_elt.getBBox().height;\n curr_tspan_words = [words[i]];\n tspan = makeSVGElement('tspan', {\n x: '0',\n dy: dy,\n }) as SVGTSpanElement;\n in_dom_text_svg_elt.appendChild(tspan);\n tspan.textContent = words[i];\n }\n }\n },\n fromShape: function(\n oncoprint_shape_computed_params: ComputedShapeParams,\n offset_x: number,\n offset_y: number\n ) {\n return shapeToSVG(oncoprint_shape_computed_params, offset_x, offset_y);\n },\n polygon: function(points: [number, number][], fill: RGBAColor) {\n return makeSVGElement('polygon', {\n points: points,\n fill: rgbString(fill),\n 'fill-opacity': fill[3],\n }) as SVGPolygonElement;\n },\n rect: function(\n x: number,\n y: number,\n width: number,\n height: number,\n fillSpecification:\n | {\n type: 'rgba';\n value: RGBAColor;\n }\n | {\n type: 'gradientId';\n value: string;\n }\n ) {\n let fill: string;\n let fillOpacity = 1;\n if (fillSpecification.type === 'rgba') {\n fill = rgbString(fillSpecification.value);\n fillOpacity = fillSpecification.value[3];\n } else {\n fill = `url(#${fillSpecification.value})`;\n }\n return makeSVGElement('rect', {\n x: x,\n y: y,\n width: width,\n height: height,\n fill: fill,\n 'fill-opacity': fillOpacity,\n }) as SVGRectElement;\n },\n bgrect: function(width: number, height: number, fill: RGBAColor) {\n return makeSVGElement('rect', {\n width: width,\n height: height,\n fill: rgbString(fill),\n 'fill-opacity': fill[3],\n }) as SVGRectElement;\n },\n path: function(\n points: [number, number][],\n stroke: RGBAColor,\n fill: RGBAColor,\n linearGradient: SVGGradientElement\n ) {\n let pointsStrArray = points.map(function(pt) {\n return pt.join(',');\n });\n pointsStrArray[0] = 'M' + points[0];\n for (var i = 1; i < points.length; i++) {\n pointsStrArray[i] = 'L' + points[i];\n }\n return makeSVGElement('path', {\n d: pointsStrArray.join(' '),\n stroke: linearGradient\n ? 'url(#' + linearGradient.getAttribute('id') + ')'\n : rgbString(stroke),\n 'stroke-opacity': linearGradient ? 0 : stroke[3],\n fill: linearGradient\n ? 'url(#' + linearGradient.getAttribute('id') + ')'\n : rgbString(fill),\n 'fill-opacity': linearGradient ? 1 : fill[3],\n }) as SVGPathElement;\n },\n stop: function(offset: number, color: RGBAColor) {\n return makeSVGElement('stop', {\n offset: offset + '%',\n 'stop-color': rgbString(color),\n 'stop-opacity': color[3],\n }) as SVGStopElement;\n },\n linearGradient: function() {\n return makeSVGElement('linearGradient', {\n id: 'linearGradient' + gradientId(),\n }) as SVGLinearGradientElement;\n },\n defs: function() {\n return makeSVGElement('defs', {}) as SVGDefsElement;\n },\n gradient: function(colorFn: (val: number) => RGBAColor) {\n const gradient = makeSVGElement('linearGradient', {\n id: 'gradient' + gradientId(),\n x1: 0,\n y1: 0,\n x2: 1,\n y2: 0,\n });\n for (let i = 0; i <= 100; i++) {\n gradient.appendChild(this.stop(i, colorFn(i / 100)));\n }\n return gradient as SVGLinearGradientElement;\n },\n};\n","import { ComputedShapeParams, Rectangle } from './oncoprintshape';\nimport { RGBAColor } from './oncoprintruleset';\n\nconst halfsqrt2 = Math.sqrt(2) / 2;\n\nfunction normalizeRGBA(color: RGBAColor): [number, number, number, number] {\n return [color[0], color[1], color[2], color[3] * 255];\n}\n\ntype AddVertexCallback = (\n vertex: [number, number, number],\n color: [number, number, number, number]\n) => void;\n\nfunction rectangleToVertexes(\n params: ComputedShapeParams,\n z_index: number,\n addVertex: AddVertexCallback\n) {\n const x = params.x,\n y = params.y,\n height = params.height,\n width = params.width;\n\n // Fill\n const fill_rgba = normalizeRGBA(params.fill);\n addVertex([x, y, z_index], fill_rgba);\n addVertex([x + width, y, z_index], fill_rgba);\n addVertex([x + width, y + height, z_index], fill_rgba);\n\n addVertex([x, y, z_index], fill_rgba);\n addVertex([x + width, y + height, z_index], fill_rgba);\n addVertex([x, y + height, z_index], fill_rgba);\n\n // Stroke\n const stroke_width = params['stroke-width'];\n if (stroke_width > 0) {\n // left side\n const stroke_rgba = normalizeRGBA(params.stroke);\n addVertex([x, y, z_index], stroke_rgba);\n addVertex([x + stroke_width, y, z_index], stroke_rgba);\n addVertex([x + stroke_width, y + height, z_index], stroke_rgba);\n\n addVertex([x, y, z_index], stroke_rgba);\n addVertex([x + stroke_width, y + height, z_index], stroke_rgba);\n addVertex([x, y + height, z_index], stroke_rgba);\n\n // right side\n addVertex([x + width, y, z_index], stroke_rgba);\n addVertex([x + width - stroke_width, y, z_index], stroke_rgba);\n addVertex([x + width - stroke_width, y + height, z_index], stroke_rgba);\n\n addVertex([x + width, y, z_index], stroke_rgba);\n addVertex([x + width - stroke_width, y + height, z_index], stroke_rgba);\n addVertex([x + width, y + height, z_index], stroke_rgba);\n\n // top side\n addVertex([x, y, z_index], stroke_rgba);\n addVertex([x + width, y, z_index], stroke_rgba);\n addVertex([x + width, y + stroke_width, z_index], stroke_rgba);\n\n addVertex([x, y, z_index], stroke_rgba);\n addVertex([x + width, y + stroke_width, z_index], stroke_rgba);\n addVertex([x, y + stroke_width, z_index], stroke_rgba);\n\n // bottom side\n addVertex([x, y + height, z_index], stroke_rgba);\n addVertex([x + width, y + height, z_index], stroke_rgba);\n addVertex([x + width, y + height - stroke_width, z_index], stroke_rgba);\n\n addVertex([x, y + height, z_index], stroke_rgba);\n addVertex([x + width, y + height - stroke_width, z_index], stroke_rgba);\n addVertex([x, y + height - stroke_width, z_index], stroke_rgba);\n }\n}\n\nfunction triangleToVertexes(\n params: ComputedShapeParams,\n z_index: number,\n addVertex: AddVertexCallback\n) {\n const fill_rgba = normalizeRGBA(params.fill);\n addVertex([params.x1, params.y1, z_index], fill_rgba);\n addVertex([params.x2, params.y2, z_index], fill_rgba);\n addVertex([params.x3, params.y3, z_index], fill_rgba);\n}\n\nfunction ellipseToVertexes(\n params: ComputedShapeParams,\n z_index: number,\n addVertex: AddVertexCallback\n) {\n const center = {\n x: params.x + params.width / 2,\n y: params.y + params.height / 2,\n };\n const horzrad = params.width / 2;\n const vertrad = params.height / 2;\n\n const fill_rgba = normalizeRGBA(params.fill);\n addVertex([center.x, center.y, z_index], fill_rgba);\n addVertex([center.x + horzrad, center.y, z_index], fill_rgba);\n addVertex(\n [\n center.x + halfsqrt2 * horzrad,\n center.y + halfsqrt2 * vertrad,\n z_index,\n ],\n fill_rgba\n );\n\n addVertex([center.x, center.y, z_index], fill_rgba);\n addVertex(\n [\n center.x + halfsqrt2 * horzrad,\n center.y + halfsqrt2 * vertrad,\n z_index,\n ],\n fill_rgba\n );\n addVertex([center.x, center.y + vertrad, z_index], fill_rgba);\n\n addVertex([center.x, center.y, z_index], fill_rgba);\n addVertex([center.x, center.y + vertrad, z_index], fill_rgba);\n addVertex(\n [\n center.x - halfsqrt2 * horzrad,\n center.y + halfsqrt2 * vertrad,\n z_index,\n ],\n fill_rgba\n );\n\n addVertex([center.x, center.y, z_index], fill_rgba);\n addVertex(\n [\n center.x - halfsqrt2 * horzrad,\n center.y + halfsqrt2 * vertrad,\n z_index,\n ],\n fill_rgba\n );\n addVertex([center.x - horzrad, center.y, z_index], fill_rgba);\n\n addVertex([center.x, center.y, z_index], fill_rgba);\n addVertex([center.x - horzrad, center.y, z_index], fill_rgba);\n addVertex(\n [\n center.x - halfsqrt2 * horzrad,\n center.y - halfsqrt2 * vertrad,\n z_index,\n ],\n fill_rgba\n );\n\n addVertex([center.x, center.y, z_index], fill_rgba);\n addVertex(\n [\n center.x - halfsqrt2 * horzrad,\n center.y - halfsqrt2 * vertrad,\n z_index,\n ],\n fill_rgba\n );\n addVertex([center.x, center.y - vertrad, z_index], fill_rgba);\n\n addVertex([center.x, center.y, z_index], fill_rgba);\n addVertex([center.x, center.y - vertrad, z_index], fill_rgba);\n addVertex(\n [\n center.x + halfsqrt2 * horzrad,\n center.y - halfsqrt2 * vertrad,\n z_index,\n ],\n fill_rgba\n );\n\n addVertex([center.x, center.y, z_index], fill_rgba);\n addVertex(\n [\n center.x + halfsqrt2 * horzrad,\n center.y - halfsqrt2 * vertrad,\n z_index,\n ],\n fill_rgba\n );\n addVertex([center.x + horzrad, center.y, z_index], fill_rgba);\n}\n\nfunction lineToVertexes(\n params: ComputedShapeParams,\n z_index: number,\n addVertex: AddVertexCallback\n) {\n // For simplicity of dealing with webGL we'll implement lines as thin triangle pairs\n let x1 = params.x1;\n let x2 = params.x2;\n let y1 = params.y1;\n let y2 = params.y2;\n\n if (x1 !== x2) {\n // WLOG make x1,y1 the one on the left\n if (Math.min(x1, x2) === x2) {\n const tmpx1 = x1;\n const tmpy1 = y1;\n x1 = x2;\n y1 = y2;\n x2 = tmpx1;\n y2 = tmpy1;\n }\n }\n\n const perpendicular_vector = [y2 - y1, x1 - x2];\n const perpendicular_vector_length = Math.sqrt(\n perpendicular_vector[0] * perpendicular_vector[0] +\n perpendicular_vector[1] * perpendicular_vector[1]\n );\n const unit_perp_vector = [\n perpendicular_vector[0] / perpendicular_vector_length,\n perpendicular_vector[1] / perpendicular_vector_length,\n ];\n\n const half_stroke_width = params['stroke-width'] / 2;\n const direction1 = [\n unit_perp_vector[0] * half_stroke_width,\n unit_perp_vector[1] * half_stroke_width,\n ];\n const direction2 = [direction1[0] * -1, direction1[1] * -1];\n const A = [x1 + direction1[0], y1 + direction1[1]];\n const B = [x1 + direction2[0], y1 + direction2[1]];\n const C = [x2 + direction1[0], y2 + direction1[1]];\n const D = [x2 + direction2[0], y2 + direction2[1]];\n\n const stroke_rgba = normalizeRGBA(params.stroke);\n addVertex([A[0], A[1], z_index], stroke_rgba);\n addVertex([B[0], B[1], z_index], stroke_rgba);\n addVertex([C[0], C[1], z_index], stroke_rgba);\n\n addVertex([C[0], C[1], z_index], stroke_rgba);\n addVertex([D[0], D[1], z_index], stroke_rgba);\n addVertex([B[0], B[1], z_index], stroke_rgba);\n}\n\nexport default function(\n oncoprint_shape_computed_params: ComputedShapeParams,\n z_index: number,\n addVertex: AddVertexCallback\n) {\n // target_position_array is an array with 3-d float vertexes\n // target_color_array is an array with rgba values in [0,1]\n // We pass them in to save on concatenation costs\n\n const type = oncoprint_shape_computed_params.type;\n if (type === 'rectangle') {\n return rectangleToVertexes(\n oncoprint_shape_computed_params,\n z_index,\n addVertex\n );\n } else if (type === 'triangle') {\n return triangleToVertexes(\n oncoprint_shape_computed_params,\n z_index,\n addVertex\n );\n } else if (type === 'ellipse') {\n return ellipseToVertexes(\n oncoprint_shape_computed_params,\n z_index,\n addVertex\n );\n } else if (type === 'line') {\n return lineToVertexes(\n oncoprint_shape_computed_params,\n z_index,\n addVertex\n );\n }\n}\n\nexport function getNumWebGLVertexes(shape: ComputedShapeParams) {\n let ret: number;\n switch (shape.type) {\n case 'rectangle':\n if (shape['stroke-width'] > 0) {\n ret = 30;\n } else {\n ret = 6;\n }\n break;\n case 'triangle':\n ret = 3;\n break;\n case 'ellipse':\n ret = 24;\n break;\n case 'line':\n ret = 6;\n break;\n }\n return ret;\n}\n","import { Datum } from './oncoprintmodel';\nimport { RGBAColor } from './oncoprintruleset';\n\ntype StringParameter = 'type';\ntype PercentNumberParameter =\n | 'width'\n | 'height'\n | 'x'\n | 'y'\n | 'x1'\n | 'x2'\n | 'x3'\n | 'y1'\n | 'y2'\n | 'y3';\ntype PlainNumberParameter = 'z' | 'stroke-width' | 'stroke-opacity';\ntype RGBAParameter = 'stroke' | 'fill';\ntype NumberParameter = PercentNumberParameter | PlainNumberParameter;\ntype Parameter = StringParameter | NumberParameter | RGBAParameter;\n\nconst default_parameter_values: { [x in StringParameter]?: string } &\n { [x in NumberParameter]?: number } &\n { [x in RGBAParameter]?: RGBAColor } = {\n width: 100,\n height: 100,\n x: 0,\n y: 0,\n z: 0,\n x1: 0,\n x2: 0,\n x3: 0,\n y1: 0,\n y2: 0,\n y3: 0,\n stroke: [0, 0, 0, 0],\n fill: [23, 23, 23, 1],\n 'stroke-width': 0,\n 'stroke-opacity': 0,\n};\n\nconst percent_parameter_name_to_dimension_index: {\n [x in PercentNumberParameter]: number;\n} = {\n width: 0,\n x: 0,\n x1: 0,\n x2: 0,\n x3: 0,\n height: 1,\n y: 1,\n y1: 1,\n y2: 1,\n y3: 1,\n};\n\nconst hash_parameter_order: Parameter[] = [\n 'width',\n 'height',\n 'x',\n 'y',\n 'z',\n 'x1',\n 'x2',\n 'x3',\n 'y1',\n 'y2',\n 'y3',\n 'stroke',\n 'fill',\n 'stroke-width',\n 'stroke-opacity',\n 'type',\n];\n\ntype StringParamFunction = (d: Datum) => string;\ntype NumberParamFunction = (d: Datum) => number;\ntype RGBAParamFunction = (d: Datum) => RGBAColor;\ntype ParamFunction =\n | StringParamFunction\n | NumberParamFunction\n | RGBAParamFunction;\n\nexport type ShapeParams = {\n [x in StringParameter]?: string | StringParamFunction;\n} &\n { [x in NumberParameter]?: number | NumberParamFunction } &\n { [x in RGBAParameter]?: RGBAColor | RGBAParamFunction };\n\ntype ShapeParamsWithType = {\n [x in StringParameter]?:\n | { type: 'function'; value: StringParamFunction }\n | { type: 'value'; value: string };\n} &\n {\n [x in NumberParameter]?:\n | { type: 'function'; value: NumberParamFunction }\n | { type: 'value'; value: number };\n } &\n {\n [x in RGBAParameter]?:\n | { type: 'function'; value: RGBAParamFunction }\n | { type: 'value'; value: RGBAColor };\n };\n\nexport type ComputedShapeParams = { [x in StringParameter]?: string } &\n { [x in NumberParameter]?: number } &\n { [x in RGBAParameter]?: RGBAColor };\n\nfunction isPercentParam(\n param_name: string\n): param_name is PercentNumberParameter {\n return param_name in percent_parameter_name_to_dimension_index;\n}\n\nexport class Shape {\n private static cache: { [hash: string]: ComputedShapeParams } = {}; // shape cache to reuse objects and thus save memory\n private params_with_type: ShapeParamsWithType = {};\n private onlyDependsOnWidthAndHeight: boolean;\n\n private instanceCache = {\n lastComputedParams: null as ComputedShapeParams | null,\n lastWidth: -1,\n lastHeight: -1,\n };\n\n constructor(private params: ShapeParams) {\n this.completeWithDefaults();\n this.markParameterTypes();\n }\n\n public static hashComputedShape(\n computed_params: ComputedShapeParams,\n z_index?: number | string\n ) {\n return (\n hash_parameter_order.reduce(function(\n hash: string,\n param_name: Parameter\n ) {\n return hash + ',' + computed_params[param_name];\n },\n '') +\n ',' +\n z_index\n );\n }\n\n private static getCachedShape(computed_params: ComputedShapeParams) {\n const hash = Shape.hashComputedShape(computed_params);\n Shape.cache[hash] = Shape.cache[hash] || Object.freeze(computed_params);\n return Shape.cache[hash];\n }\n\n public getRequiredParameters(): Parameter[] {\n throw 'Not defined for base class';\n }\n\n public completeWithDefaults() {\n const required_parameters = this.getRequiredParameters();\n for (let i = 0; i < required_parameters.length; i++) {\n const param = required_parameters[i];\n this.params[param] = (typeof this.params[param] === 'undefined'\n ? default_parameter_values[param]\n : this.params[param]) as any;\n }\n }\n public markParameterTypes() {\n const parameters = Object.keys(this.params) as Parameter[];\n let onlyDependsOnWidthAndHeight = true;\n for (let i = 0; i < parameters.length; i++) {\n const param_name = parameters[i];\n const param_val = this.params[param_name];\n if (typeof param_val === 'function') {\n this.params_with_type[param_name] = {\n type: 'function',\n value: param_val as any,\n };\n onlyDependsOnWidthAndHeight = false;\n } else {\n this.params_with_type[param_name] = {\n type: 'value',\n value: param_val,\n } as any;\n }\n }\n this.onlyDependsOnWidthAndHeight = onlyDependsOnWidthAndHeight;\n }\n public getComputedParams(\n d: Datum,\n base_width: number,\n base_height: number\n ) {\n if (\n this.onlyDependsOnWidthAndHeight &&\n this.instanceCache.lastWidth === base_width &&\n this.instanceCache.lastHeight === base_height\n ) {\n return this.instanceCache.lastComputedParams!;\n }\n\n const computed_params: Partial<ComputedShapeParams> = {};\n const param_names = Object.keys(this.params_with_type) as Parameter[];\n const dimensions: [number, number] = [base_width, base_height];\n for (let i = 0; i < param_names.length; i++) {\n const param_name = param_names[i];\n const param_val_map = this.params_with_type[param_name];\n let param_val = param_val_map.value;\n if (param_name !== 'type') {\n if (param_val_map.type === 'function') {\n param_val = (param_val as ParamFunction)(d);\n }\n // at this point, param_val is resolved to either a string or number\n\n if (isPercentParam(param_name)) {\n // if its a percentage param, compute value as percentage of width or height\n param_val =\n ((param_val as number) / 100) *\n dimensions[\n percent_parameter_name_to_dimension_index[\n param_name\n ]\n ];\n }\n }\n //@ts-ignore\n computed_params[param_name] = param_val;\n }\n\n if (this.onlyDependsOnWidthAndHeight) {\n // only cache if its cacheable, otherwise it would be a waste of memory to save\n this.instanceCache.lastHeight = base_height;\n this.instanceCache.lastWidth = base_width;\n this.instanceCache.lastComputedParams = Shape.getCachedShape(\n computed_params\n );\n }\n\n return Shape.getCachedShape(computed_params);\n }\n}\n\ntype SpecificComputedShapeParams<ShapeParamType> = {\n [x in ShapeParamType & StringParameter]: string;\n} &\n { [x in ShapeParamType & NumberParameter]: number } &\n { [x in ShapeParamType & RGBAParameter]: RGBAColor };\n\ntype RectangleParameter =\n | 'width'\n | 'height'\n | 'x'\n | 'y'\n | 'z'\n | 'stroke'\n | 'stroke-width'\n | 'fill';\nexport type ComputedRectangleParams = SpecificComputedShapeParams<\n RectangleParameter\n>;\nexport class Rectangle extends Shape {\n public getRequiredParameters(): RectangleParameter[] {\n return [\n 'width',\n 'height',\n 'x',\n 'y',\n 'z',\n 'stroke',\n 'fill',\n 'stroke-width',\n ];\n }\n}\n\ntype TriangleParameter =\n | 'x1'\n | 'x2'\n | 'x3'\n | 'y1'\n | 'y2'\n | 'y3'\n | 'z'\n | 'stroke'\n | 'stroke-width'\n | 'fill';\nexport type ComputedTriangleParams = SpecificComputedShapeParams<\n TriangleParameter\n>;\nexport class Triangle extends Shape {\n public getRequiredParameters(): TriangleParameter[] {\n return [\n 'x1',\n 'x2',\n 'x3',\n 'y1',\n 'y2',\n 'y3',\n 'z',\n 'stroke',\n 'fill',\n 'stroke-width',\n ];\n }\n}\n\nexport type EllipseParameter =\n | 'width'\n | 'height'\n | 'x'\n | 'y'\n | 'z'\n | 'stroke'\n | 'stroke-width'\n | 'fill';\nexport type ComputedEllipseParams = SpecificComputedShapeParams<\n EllipseParameter\n>;\nexport class Ellipse extends Shape {\n public getRequiredParameters(): EllipseParameter[] {\n return [\n 'width',\n 'height',\n 'x',\n 'y',\n 'z',\n 'stroke',\n 'fill',\n 'stroke-width',\n ];\n }\n}\n\nexport type LineParameter =\n | 'x1'\n | 'y1'\n | 'x2'\n | 'y2'\n | 'z'\n | 'stroke'\n | 'stroke-width';\nexport type ComputedLineParams = SpecificComputedShapeParams<LineParameter>;\nexport class Line extends Shape {\n public getRequiredParameters(): LineParameter[] {\n return ['x1', 'x2', 'y1', 'y2', 'z', 'stroke', 'stroke-width'];\n }\n}\n","export function getVertexShaderSource(columnsRightAfterGapsSize: number) {\n return `precision highp float;\n attribute float aPosVertex;\n attribute float aColVertex;\n attribute float aVertexOncoprintColumn;\n\n uniform float gapSize;\n\n uniform float columnsRightAfterGaps[${columnsRightAfterGapsSize}]; // sorted in ascending order\n\n uniform float columnWidth;\n uniform float scrollX;\n uniform float zoomX;\n uniform float scrollY;\n uniform float zoomY;\n uniform mat4 uMVMatrix;\n uniform mat4 uPMatrix;\n uniform float offsetY;\n uniform float supersamplingRatio;\n uniform float positionBitPackBase;\n uniform float texSize;\n varying float texCoord;\n \n \n\n vec3 getUnpackedPositionVec3() {\n \tfloat pos0 = floor(aPosVertex / (positionBitPackBase * positionBitPackBase));\n \tfloat pos0Contr = pos0 * positionBitPackBase * positionBitPackBase;\n \tfloat pos1 = floor((aPosVertex - pos0Contr)/positionBitPackBase);\n \tfloat pos1Contr = pos1 * positionBitPackBase;\n \tfloat pos2 = aPosVertex - pos0Contr - pos1Contr;\n \treturn vec3(pos0, pos1, pos2);\n }\n\n float getGapOffset() {\n // first do binary search to compute the number of gaps before this column, G(c)\n // G(c) = the index in columnsRightAfterGaps of the first entry thats greater than c\n \n int lower_incl = 0;\n int upper_excl = ${columnsRightAfterGapsSize};\n int numGaps = 0;\n \n for (int loopDummyVar = 0; loopDummyVar == 0; loopDummyVar += 0) {\n if (lower_incl >= upper_excl) {\n break;\n }\n \n int middle = (lower_incl + upper_excl)/2;\n if (columnsRightAfterGaps[middle] < aVertexOncoprintColumn) {\n // G(c) > middle\n lower_incl = middle + 1;\n } else if (columnsRightAfterGaps[middle] == aVertexOncoprintColumn) {\n // G(c) = middle + 1\n numGaps = middle + 1;\n break;\n } else {\n // columnsRightAfterGaps[middle] > column, so G(c) <= middle\n if (middle == 0) {\n // 0 <= G(c) <= 0 -> G(c) = 0\n numGaps = 0;\n break;\n } else if (columnsRightAfterGaps[middle-1] < aVertexOncoprintColumn) {\n // G(c) = middle\n numGaps = middle;\n break;\n } else {\n // columnsRightAfterGaps[middle-1] >= column, so G(c) <= middle-1\n upper_excl = middle;\n }\n }\n }\n \n // multiply it by the gap size to get the total offset\n return float(numGaps)*gapSize;\n }\n\n void main(void) {\n \tgl_Position = vec4(getUnpackedPositionVec3(), 1.0);\n \tgl_Position[0] += aVertexOncoprintColumn*columnWidth;\n \tgl_Position *= vec4(zoomX, zoomY, 1.0, 1.0);\n\n // gaps should not be affected by zoom:\n gl_Position[0] += getGapOffset();\n\n // offsetY is given zoomed:\n \tgl_Position[1] += offsetY;\n\n \tgl_Position -= vec4(scrollX, scrollY, 0.0, 0.0);\n \tgl_Position[0] *= supersamplingRatio;\n \tgl_Position[1] *= supersamplingRatio;\n \tgl_Position = uPMatrix * uMVMatrix * gl_Position;\n\n \ttexCoord = (aColVertex + 0.5) / texSize;\n }`;\n}\n\nexport function getFragmentShaderSource() {\n return `precision mediump float;\n varying float texCoord;\n uniform sampler2D uSampler;\n void main(void) {\n gl_FragColor = texture2D(uSampler, vec2(texCoord, 0.5));\n }`;\n}\n","import gl_matrix from 'gl-matrix';\nimport svgfactory from './svgfactory';\nimport makeSvgElement from './makesvgelement';\nimport shapeToVertexes, {\n getNumWebGLVertexes,\n} from './oncoprintshapetovertexes';\nimport CachedProperty from './CachedProperty';\nimport { ComputedShapeParams, Shape } from './oncoprintshape';\nimport $ from 'jquery';\nimport OncoprintModel, {\n ColumnId,\n ColumnLabel,\n ColumnProp,\n IdentifiedShapeList,\n TrackId,\n TrackOverlappingCells,\n TrackProp,\n} from './oncoprintmodel';\nimport OncoprintToolTip from './oncoprinttooltip';\nimport { arrayFindIndex, ifndef, sgndiff } from './utils';\nimport MouseUpEvent = JQuery.MouseUpEvent;\nimport MouseMoveEvent = JQuery.MouseMoveEvent;\nimport { CellClickCallback, CellMouseOverCallback } from './oncoprint';\nimport { getFragmentShaderSource, getVertexShaderSource } from './shaders';\nimport _ from 'lodash';\n\ntype ColorBankIndex = number; // index into vertex bank (e.g. 0, 4, 8, ...)\ntype ColorBank = number[]; // flat list of color: [c0,c0,c0,c0,v1,v1,v1,c1,c1,c1,c1,...]\ntype ColumnIdIndex = number;\ntype PositionVertex = [number, number, number];\ntype ColorVertex = [number, number, number, number];\n\nexport type OncoprintWebGLContext = WebGLRenderingContext & {\n viewportWidth: number;\n viewportHeight: number;\n}; // TODO: handle this differently, considered an anti-pattern https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html\n\nexport type OncoprintShaderProgram = WebGLProgram & {\n vertexPositionAttribute: any;\n vertexColorAttribute: any;\n vertexOncoprintColumnAttribute: any;\n\n gapSizeUniform: WebGLUniformLocation;\n columnsRightAfterGapsUniform: WebGLUniformLocation;\n\n samplerUniform: WebGLUniformLocation;\n pMatrixUniform: WebGLUniformLocation;\n mvMatrixUniform: WebGLUniformLocation;\n columnWidthUniform: WebGLUniformLocation;\n scrollXUniform: WebGLUniformLocation;\n scrollYUniform: WebGLUniformLocation;\n zoomXUniform: WebGLUniformLocation;\n zoomYUniform: WebGLUniformLocation;\n offsetYUniform: WebGLUniformLocation;\n supersamplingRatioUniform: WebGLUniformLocation;\n positionBitPackBaseUniform: WebGLUniformLocation;\n texSizeUniform: WebGLUniformLocation;\n}; // TODO: handle this differently, considered an anti-pattern https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html\n\nexport type OncoprintTrackBuffer = WebGLBuffer & {\n itemSize: number;\n numItems: number;\n}; // TODO: handle this differently, considered an anti-pattern https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html\n\nexport type OncoprintVertexTrackBuffer = OncoprintTrackBuffer & {\n // the universal shapes vertexes start at index itemSize*numItems, and go on for itemSize*universalShapesNumItems indexes\n specificShapesNumItems: number;\n universalShapesNumItems: number;\n};\n\nconst COLUMN_LABEL_ANGLE = 65;\nconst COLUMN_LABEL_MARGIN = 30;\n\nconst CELL_HIGHLIGHT_STROKE = 'rgba(0,0,0,0.5)';\n\nexport default class OncoprintWebGLCellView {\n public readonly position_bit_pack_base = 128;\n private readonly supersampling_ratio = 2;\n private readonly antialias_on_cell_width_thresh = 5;\n private antialias = true;\n\n private dummy_scroll_div_client_size: CachedProperty<{\n width: number;\n height: number;\n }>;\n public visible_area_width: number;\n private mouseMoveHandler: (evt: MouseMoveEvent) => void;\n\n private ctx: OncoprintWebGLContext | null;\n private ext: ANGLE_instanced_arrays | null;\n private overlay_ctx: CanvasRenderingContext2D | null;\n private column_label_ctx: CanvasRenderingContext2D | null;\n private mvMatrix: any;\n private pMatrix: any;\n private shader_program: OncoprintShaderProgram;\n\n private scroll_x: number = 0;\n private scroll_y: number = 0;\n private maximum_column_label_width = 0;\n private maximum_column_label_height = 0;\n private rendering_suppressed = false;\n\n private specific_shapes: TrackProp<IdentifiedShapeList[]> = {};\n private universal_shapes: TrackProp<ComputedShapeParams[]> = {};\n public vertex_data: TrackProp<{\n pos_array: Float32Array;\n col_array: Float32Array; //ColorBankIndex[],\n col_bank: ColorBank;\n universal_shapes_start_index: number;\n }> = {};\n public vertex_column_array: TrackProp<Float32Array> = {}; // ColumnIdIndex[]\n private vertex_position_buffer: TrackProp<OncoprintVertexTrackBuffer> = {};\n private vertex_color_buffer: TrackProp<OncoprintVertexTrackBuffer> = {};\n private vertex_column_buffer: TrackProp<OncoprintTrackBuffer> = {};\n private simple_count_buffer: OncoprintTrackBuffer | null = null;\n private is_buffer_empty: TrackProp<{\n position: boolean;\n color: boolean;\n column: boolean;\n color_texture: boolean;\n }> = {};\n private color_texture: TrackProp<{\n texture: WebGLTexture;\n size: number;\n }> = {};\n private id_to_first_vertex_index: TrackProp<ColumnProp<number>> = {}; // index of first vertex corresponding to given id for given track, e.g. 0, 3, 6, ...\n\n constructor(\n private $container: JQuery,\n private $canvas: JQuery<HTMLCanvasElement>,\n private $overlay_canvas: JQuery<HTMLCanvasElement>,\n private $column_label_canvas: JQuery<HTMLCanvasElement>,\n private $dummy_scroll_div_contents: JQuery,\n model: OncoprintModel,\n private tooltip: OncoprintToolTip,\n private highlight_area_callback:\n | undefined\n | ((left: number, right: number) => void),\n cell_over_callback: CellMouseOverCallback,\n cell_click_callback: CellClickCallback\n ) {\n this.getWebGLContextAndSetUpMatrices();\n this.setUpShaders(model);\n this.getOverlayContextAndClear();\n this.visible_area_width = $canvas[0].width;\n\n const self = this;\n\n this.tooltip.center = true;\n\n this.scroll_x = 0;\n this.scroll_y = 0;\n this.dummy_scroll_div_client_size = new CachedProperty(\n {\n width: $dummy_scroll_div_contents.parent()[0].clientWidth,\n height: $dummy_scroll_div_contents.parent()[0].clientHeight,\n },\n function() {\n return {\n width: $dummy_scroll_div_contents.parent()[0].clientWidth,\n height: $dummy_scroll_div_contents.parent()[0].clientHeight,\n };\n }\n );\n\n this.highlight_area_callback =\n typeof highlight_area_callback === 'undefined'\n ? function() {}\n : highlight_area_callback; // function(left, right) { ... }\n\n (function initializeOverlayEvents(self) {\n let dragging = false;\n let drag_diff_minimum = 10;\n let drag_start_x: number;\n let drag_end_x: number;\n let last_cell_over: TrackOverlappingCells | null = null;\n\n function dragIsValid(drag_start_x: number, drag_end_x: number) {\n return Math.abs(drag_start_x - drag_end_x) >= drag_diff_minimum;\n }\n\n function executeDragOrClick(mouse_up_evt?: MouseUpEvent) {\n if (!dragging) {\n return;\n }\n dragging = false;\n\n if (!dragIsValid(drag_start_x, drag_end_x)) {\n if (mouse_up_evt) {\n // its a click\n const offset = self.$overlay_canvas.offset();\n const mouseX = mouse_up_evt.pageX - offset.left;\n const mouseY = mouse_up_evt.pageY - offset.top;\n const overlapping_cells = model.getOverlappingCells(\n mouseX + self.scroll_x,\n mouseY + self.scroll_y\n );\n if (overlapping_cells === null) {\n cell_click_callback(null);\n } else {\n cell_click_callback(\n overlapping_cells.ids[0],\n overlapping_cells.track\n );\n }\n }\n return;\n }\n const left = Math.min(drag_start_x, drag_end_x);\n const right = Math.max(drag_start_x, drag_end_x);\n self.highlight_area_callback(\n left + self.scroll_x,\n right + self.scroll_x\n );\n }\n\n function mouseInOverlayCanvas(mouse_x: number, mouse_y: number) {\n const offset = self.$overlay_canvas.offset();\n const width = self.$overlay_canvas.width();\n const height = self.$overlay_canvas.height();\n return (\n mouse_x >= offset.left &&\n mouse_x < width + offset.left &&\n mouse_y >= offset.top &&\n mouse_y < height + offset.top\n );\n }\n\n self.mouseMoveHandler = function(evt) {\n if (!mouseInOverlayCanvas(evt.pageX, evt.pageY)) {\n self.clearOverlay();\n self.highlightHighlightedIds(model);\n self.highlightHighlightedTracks(model);\n tooltip.hide();\n if (last_cell_over !== null) {\n last_cell_over = null;\n cell_over_callback(null);\n }\n }\n };\n\n $(document).on('mousemove', self.mouseMoveHandler);\n self.$overlay_canvas.on('mousemove', function(evt) {\n if (self.rendering_suppressed) {\n return;\n }\n self.clearOverlay();\n\n const offset = self.$overlay_canvas.offset();\n const mouseX = evt.pageX - offset.left;\n const mouseY = evt.pageY - offset.top;\n let overlapping_cells = model.getOverlappingCells(\n mouseX + self.scroll_x,\n mouseY + self.scroll_y\n );\n if (!dragging) {\n const overlapping_data =\n overlapping_cells === null\n ? null\n : overlapping_cells.ids.map(function(id) {\n return model.getTrackDatum(\n overlapping_cells.track,\n id\n );\n });\n if (overlapping_data !== null) {\n last_cell_over = overlapping_cells;\n cell_over_callback(\n overlapping_cells.ids[0],\n overlapping_cells.track\n );\n\n self.highlightCell(\n model,\n overlapping_cells.track,\n overlapping_cells.ids[0]\n );\n self.highlightColumn(model, overlapping_cells.ids[0]);\n\n const clientRect = self.$overlay_canvas[0].getBoundingClientRect();\n tooltip.show(\n 250,\n model.getZoomedColumnLeft(\n overlapping_cells.ids[0]\n ) +\n model.getCellWidth() / 2 +\n clientRect.left -\n self.scroll_x,\n model.getCellTops(overlapping_cells.track) +\n clientRect.top -\n self.scroll_y,\n model.getTrackTooltipFn(overlapping_cells.track)(\n overlapping_data\n )\n );\n } else {\n tooltip.hideIfNotAlreadyGoingTo(150);\n overlapping_cells = null;\n }\n } else {\n overlapping_cells = null;\n drag_end_x = mouseX;\n const left = Math.min(mouseX, drag_start_x);\n const right = Math.max(mouseX, drag_start_x);\n const drag_rect_fill = dragIsValid(drag_start_x, drag_end_x)\n ? 'rgba(0,0,0,0.3)'\n : 'rgba(0,0,0,0.2)';\n self.overlayFillRect(\n left,\n 0,\n right - left,\n self.getVisibleAreaHeight(model),\n drag_rect_fill\n );\n }\n if (overlapping_cells === null) {\n last_cell_over = null;\n cell_over_callback(null);\n }\n\n self.highlightHighlightedIds(\n model,\n overlapping_cells ? overlapping_cells.ids : []\n );\n self.highlightHighlightedTracks(model);\n });\n\n self.$overlay_canvas.on('mousedown', function(evt) {\n if (!mouseInOverlayCanvas(evt.pageX, evt.pageY)) {\n return;\n }\n dragging = true;\n drag_start_x = evt.pageX - self.$overlay_canvas.offset().left;\n drag_end_x = drag_start_x;\n\n tooltip.hide();\n });\n self.$overlay_canvas.on('mouseup', function(evt) {\n if (!mouseInOverlayCanvas(evt.pageX, evt.pageY)) {\n return;\n }\n executeDragOrClick(evt);\n });\n self.$overlay_canvas.on('mouseleave', function(evt) {\n executeDragOrClick();\n });\n })(this);\n\n $dummy_scroll_div_contents.parent().scroll(function() {\n self.clearOverlay();\n self.highlightHighlightedIds(model);\n self.highlightHighlightedTracks(model);\n });\n }\n\n private getNewCanvas() {\n const old_canvas = this.$canvas[0];\n const new_canvas = old_canvas.cloneNode() as HTMLCanvasElement;\n const parent_node = old_canvas.parentNode;\n parent_node.removeChild(old_canvas);\n parent_node.insertBefore(new_canvas, parent_node.childNodes[0]); // keep on bottom since we need overlays to not be hidden\n this.$canvas = $(new_canvas);\n this.ctx = null;\n this.ext = null;\n }\n\n private getWebGLCanvasContext() {\n try {\n const canvas = this.$canvas[0];\n const ctx =\n this.ctx ||\n (canvas.getContext('experimental-webgl', {\n alpha: false,\n antialias: this.antialias,\n }) as OncoprintWebGLContext);\n ctx.clearColor(1.0, 1.0, 1.0, 1.0);\n ctx.clear(ctx.COLOR_BUFFER_BIT | ctx.DEPTH_BUFFER_BIT);\n ctx.viewportWidth = canvas.width;\n ctx.viewportHeight = canvas.height;\n ctx.viewport(0, 0, ctx.viewportWidth, ctx.viewportHeight);\n ctx.enable(ctx.DEPTH_TEST);\n ctx.enable(ctx.BLEND);\n ctx.blendEquation(ctx.FUNC_ADD);\n ctx.blendFunc(ctx.SRC_ALPHA, ctx.ONE_MINUS_SRC_ALPHA);\n ctx.depthMask(false);\n\n return ctx;\n } catch (e) {\n return null;\n }\n }\n\n private createShaderProgram(\n vertex_shader: WebGLShader,\n fragment_shader: WebGLShader\n ) {\n const program = this.ctx.createProgram();\n this.ctx.attachShader(program, vertex_shader);\n this.ctx.attachShader(program, fragment_shader);\n\n this.ctx.linkProgram(program);\n\n const success = this.ctx.getProgramParameter(\n program,\n this.ctx.LINK_STATUS\n );\n if (!success) {\n const msg = this.ctx.getProgramInfoLog(program);\n this.ctx.deleteProgram(program);\n throw 'Unable to link shader program: ' + msg;\n }\n\n return program;\n }\n\n private createShader(\n source: string,\n type: 'VERTEX_SHADER' | 'FRAGMENT_SHADER'\n ) {\n const shader = this.ctx.createShader(this.ctx[type]);\n this.ctx.shaderSource(shader, source);\n this.ctx.compileShader(shader);\n\n const success = this.ctx.getShaderParameter(\n shader,\n this.ctx.COMPILE_STATUS\n );\n if (!success) {\n const msg = this.ctx.getShaderInfoLog(shader);\n this.ctx.deleteShader(shader);\n throw 'Unable to compile shader: ' + msg;\n }\n\n return shader;\n }\n\n private overlayStrokeRect(\n x: number,\n y: number,\n width: number,\n height: number,\n color: string\n ) {\n const ctx = this.overlay_ctx;\n ctx.strokeStyle = color;\n (ctx as any).strokeWidth = 10;\n ctx.strokeRect(\n this.supersampling_ratio * x,\n this.supersampling_ratio * y,\n this.supersampling_ratio * width,\n this.supersampling_ratio * height\n );\n }\n\n private overlayFillRect(\n x: number,\n y: number,\n width: number,\n height: number,\n color: string\n ) {\n const ctx = this.overlay_ctx;\n ctx.fillStyle = color;\n ctx.fillRect(\n this.supersampling_ratio * x,\n this.supersampling_ratio * y,\n this.supersampling_ratio * width,\n this.supersampling_ratio * height\n );\n }\n\n public clearOverlay() {\n this.overlay_ctx.fillStyle = 'rgba(0,0,0,0)';\n this.overlay_ctx.clearRect(\n 0,\n 0,\n this.$overlay_canvas[0].width,\n this.$overlay_canvas[0].height\n );\n }\n\n private getOverlayContextAndClear() {\n this.overlay_ctx = this.$overlay_canvas[0].getContext('2d');\n this.clearOverlay();\n }\n\n private getColumnLabelsContext() {\n this.column_label_ctx = this.$column_label_canvas[0].getContext('2d');\n }\n\n private getColumnLabelY(model: OncoprintModel) {\n return (\n (model.getOncoprintHeight() + 10 - this.scroll_y) *\n this.supersampling_ratio\n );\n }\n\n private overlayColumnLabelHighlight(model: OncoprintModel, id: ColumnId) {\n const label = model.getColumnLabels()[id];\n if (label) {\n this.prepareContextForColumnLabelText(model, this.overlay_ctx);\n const cell_width = model.getCellWidth();\n const left_padding =\n ((label.left_padding_percent || 0) * cell_width) / 100;\n let highlightHeight = cell_width * this.supersampling_ratio;\n let highlightWidth =\n this.overlay_ctx.measureText(label.text).width +\n left_padding * this.supersampling_ratio +\n 20;\n let dx = left_padding * this.supersampling_ratio;\n if (label.circle_color) {\n const circleDiameter =\n 2 *\n this.getColumnLabelCircleSpec(model).radius *\n this.supersampling_ratio;\n highlightHeight = Math.max(highlightHeight, circleDiameter);\n highlightWidth = Math.max(highlightWidth, circleDiameter);\n dx = Math.min(dx, -circleDiameter / 2);\n }\n const origin_x =\n (model.getZoomedColumnLeft(id) +\n cell_width / 2 -\n this.scroll_x) *\n this.supersampling_ratio;\n const origin_y = this.getColumnLabelY(model);\n this.overlay_ctx.save();\n this.overlay_ctx.translate(origin_x, origin_y);\n const angle = this.getColumnLabelAngleRadians(label);\n this.overlay_ctx.rotate(angle);\n this.overlay_ctx.fillStyle = 'rgba(255,255,0,0.4)';\n this.overlay_ctx.fillRect(\n dx,\n -highlightHeight / 2,\n highlightWidth,\n highlightHeight\n );\n this.overlay_ctx.restore();\n }\n }\n\n private getWebGLContextAndSetUpMatrices() {\n this.ctx = this.getWebGLCanvasContext();\n if (this.ctx) {\n this.ext = this.ctx.getExtension('ANGLE_instanced_arrays');\n }\n (function initializeMatrices(self) {\n const mvMatrix = gl_matrix.mat4.create();\n gl_matrix.mat4.lookAt(mvMatrix, [0, 0, 1], [0, 0, 0], [0, 1, 0]);\n self.mvMatrix = mvMatrix;\n\n const pMatrix = gl_matrix.mat4.create();\n gl_matrix.mat4.ortho(\n pMatrix,\n 0,\n self.ctx.viewportWidth,\n self.ctx.viewportHeight,\n 0,\n -5,\n 1000\n ); // y axis inverted so that y increases down like SVG\n self.pMatrix = pMatrix;\n })(this);\n }\n\n private getColumnIndexesAfterAGap(model: OncoprintModel) {\n // uniform length is minimum 1\n return model\n .getColumnIndexesAfterAGap()\n .concat([Number.POSITIVE_INFINITY]);\n }\n\n private setUpShaders(model: OncoprintModel) {\n const columnsRightAfterGapsSize = this.getColumnIndexesAfterAGap(model)\n .length;\n const vertex_shader = this.createShader(\n getVertexShaderSource(columnsRightAfterGapsSize),\n 'VERTEX_SHADER'\n );\n const fragment_shader = this.createShader(\n getFragmentShaderSource(),\n 'FRAGMENT_SHADER'\n );\n\n const shader_program = this.createShaderProgram(\n vertex_shader,\n fragment_shader\n ) as OncoprintShaderProgram;\n shader_program.vertexPositionAttribute = this.ctx.getAttribLocation(\n shader_program,\n 'aPosVertex'\n );\n this.ctx.enableVertexAttribArray(\n shader_program.vertexPositionAttribute\n );\n shader_program.vertexColorAttribute = this.ctx.getAttribLocation(\n shader_program,\n 'aColVertex'\n );\n this.ctx.enableVertexAttribArray(shader_program.vertexColorAttribute);\n shader_program.vertexOncoprintColumnAttribute = this.ctx.getAttribLocation(\n shader_program,\n 'aVertexOncoprintColumn'\n );\n this.ctx.enableVertexAttribArray(\n shader_program.vertexOncoprintColumnAttribute\n );\n\n shader_program.gapSizeUniform = this.ctx.getUniformLocation(\n shader_program,\n 'gapSize'\n );\n shader_program.columnsRightAfterGapsUniform = this.ctx.getUniformLocation(\n shader_program,\n 'columnsRightAfterGaps'\n );\n shader_program.samplerUniform = this.ctx.getUniformLocation(\n shader_program,\n 'uSampler'\n );\n shader_program.pMatrixUniform = this.ctx.getUniformLocation(\n shader_program,\n 'uPMatrix'\n );\n shader_program.mvMatrixUniform = this.ctx.getUniformLocation(\n shader_program,\n 'uMVMatrix'\n );\n shader_program.columnWidthUniform = this.ctx.getUniformLocation(\n shader_program,\n 'columnWidth'\n );\n shader_program.scrollXUniform = this.ctx.getUniformLocation(\n shader_program,\n 'scrollX'\n );\n shader_program.scrollYUniform = this.ctx.getUniformLocation(\n shader_program,\n 'scrollY'\n );\n shader_program.zoomXUniform = this.ctx.getUniformLocation(\n shader_program,\n 'zoomX'\n );\n shader_program.zoomYUniform = this.ctx.getUniformLocation(\n shader_program,\n 'zoomY'\n );\n shader_program.offsetYUniform = this.ctx.getUniformLocation(\n shader_program,\n 'offsetY'\n );\n shader_program.supersamplingRatioUniform = this.ctx.getUniformLocation(\n shader_program,\n 'supersamplingRatio'\n );\n shader_program.positionBitPackBaseUniform = this.ctx.getUniformLocation(\n shader_program,\n 'positionBitPackBase'\n );\n shader_program.texSizeUniform = this.ctx.getUniformLocation(\n shader_program,\n 'texSize'\n );\n\n this.shader_program = shader_program;\n }\n\n private resizeAndClear(model: OncoprintModel) {\n const height = this.getVisibleAreaHeight(model);\n const total_width = this.getTotalWidth(model);\n const visible_area_width = this.visible_area_width;\n const scrollbar_slack = 20;\n this.$dummy_scroll_div_contents.css({\n 'min-width': total_width,\n 'min-height': model.getOncoprintHeight(),\n });\n this.$dummy_scroll_div_contents.parent().css({\n height: height + scrollbar_slack,\n width: visible_area_width + scrollbar_slack,\n }); // add space for scrollbars\n this.dummy_scroll_div_client_size.update();\n this.$canvas[0].height = this.supersampling_ratio * height;\n this.$canvas[0].style.height = height + 'px';\n this.$overlay_canvas[0].height = this.supersampling_ratio * height;\n this.$overlay_canvas[0].style.height = height + 'px';\n this.$column_label_canvas[0].height = this.supersampling_ratio * height;\n this.$column_label_canvas[0].style.height = height + 'px';\n this.$canvas[0].width = this.supersampling_ratio * visible_area_width;\n this.$canvas[0].style.width = visible_area_width + 'px';\n this.$overlay_canvas[0].width =\n this.supersampling_ratio * visible_area_width;\n this.$overlay_canvas[0].style.width = visible_area_width + 'px';\n this.$column_label_canvas[0].width =\n this.supersampling_ratio * visible_area_width;\n this.$column_label_canvas[0].style.width = visible_area_width + 'px';\n this.$container.css('height', height);\n this.$container.css('width', visible_area_width);\n this.getWebGLContextAndSetUpMatrices();\n this.setUpShaders(model);\n this.getOverlayContextAndClear();\n this.getColumnLabelsContext();\n }\n\n private renderAllTracks(model: OncoprintModel, dont_resize?: boolean) {\n if (this.rendering_suppressed) {\n return;\n }\n\n const scroll_x = this.scroll_x;\n const scroll_y = this.scroll_y;\n const zoom_x = model.getHorzZoom();\n const zoom_y = model.getVertZoom();\n\n const viewport = this.getViewportOncoprintSpace(model);\n const window_left = viewport.left;\n const window_right = viewport.right;\n const window_top = viewport.top;\n const window_bottom = viewport.bottom;\n const id_order = model.getIdOrder();\n let horz_first_id_in_window_index = model.getClosestColumnIndexToLeft(\n window_left\n );\n const horz_first_id_after_window_index = model.getClosestColumnIndexToLeft(\n window_right,\n false,\n true\n );\n horz_first_id_in_window_index =\n horz_first_id_in_window_index < 1\n ? 0\n : horz_first_id_in_window_index - 1;\n\n const horz_first_id_in_window = id_order[horz_first_id_in_window_index];\n const horz_first_id_after_window =\n horz_first_id_after_window_index === -1 ||\n horz_first_id_after_window_index === id_order.length\n ? null\n : id_order[horz_first_id_after_window_index];\n\n if (!dont_resize) {\n this.resizeAndClear(model);\n }\n this.ctx.clearColor(1.0, 1.0, 1.0, 1.0);\n this.ctx.clear(this.ctx.COLOR_BUFFER_BIT | this.ctx.DEPTH_BUFFER_BIT);\n\n const tracks = model.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track_id = tracks[i];\n const cell_top = model.getCellTops(track_id);\n const cell_height = model.getCellHeight(track_id);\n if (\n cell_top / zoom_y >= window_bottom ||\n (cell_top + cell_height) / zoom_y < window_top\n ) {\n // vertical clipping\n continue;\n }\n const buffers = this.getTrackBuffers(track_id);\n if (buffers.position.numItems === 0) {\n continue;\n }\n\n for (const forSpecificShapes of [false, true]) {\n const shader_program = this.shader_program;\n this.ctx.useProgram(shader_program);\n\n if (forSpecificShapes) {\n this.ctx.bindBuffer(\n this.ctx.ARRAY_BUFFER,\n buffers.position\n );\n this.ctx.vertexAttribPointer(\n shader_program.vertexPositionAttribute,\n buffers.position.itemSize,\n this.ctx.FLOAT,\n false,\n 0,\n 0\n );\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, buffers.color);\n this.ctx.vertexAttribPointer(\n shader_program.vertexColorAttribute,\n buffers.color.itemSize,\n this.ctx.FLOAT,\n false,\n 0,\n 0\n );\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, buffers.column);\n this.ctx.vertexAttribPointer(\n shader_program.vertexOncoprintColumnAttribute,\n buffers.column.itemSize,\n this.ctx.FLOAT,\n false,\n 0,\n 0\n );\n // make sure to set divisor 0, otherwise the track will only use the first item in the column buffer\n this.ext.vertexAttribDivisorANGLE(\n shader_program.vertexOncoprintColumnAttribute,\n 0\n );\n } else {\n // set up for drawArraysInstanced\n const universalShapesStart =\n buffers.position.specificShapesNumItems *\n buffers.position.itemSize;\n this.ctx.bindBuffer(\n this.ctx.ARRAY_BUFFER,\n buffers.position\n );\n this.ctx.vertexAttribPointer(\n shader_program.vertexPositionAttribute,\n buffers.position.itemSize,\n this.ctx.FLOAT,\n false,\n 0,\n 4 * universalShapesStart\n );\n\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, buffers.color);\n this.ctx.vertexAttribPointer(\n shader_program.vertexColorAttribute,\n buffers.color.itemSize,\n this.ctx.FLOAT,\n false,\n 0,\n 4 * universalShapesStart\n );\n\n this.ctx.bindBuffer(\n this.ctx.ARRAY_BUFFER,\n this.simple_count_buffer\n );\n this.ctx.vertexAttribPointer(\n shader_program.vertexOncoprintColumnAttribute,\n 1,\n this.ctx.FLOAT,\n false,\n 0,\n 4 * horz_first_id_in_window_index\n );\n this.ext.vertexAttribDivisorANGLE(\n shader_program.vertexOncoprintColumnAttribute,\n 1\n );\n }\n\n this.ctx.activeTexture(this.ctx.TEXTURE0);\n this.ctx.bindTexture(\n this.ctx.TEXTURE_2D,\n buffers.color_tex.texture\n );\n this.ctx.uniform1i(shader_program.samplerUniform, 0);\n this.ctx.uniform1f(\n shader_program.texSizeUniform,\n buffers.color_tex.size\n );\n\n this.ctx.uniform1fv(\n shader_program.columnsRightAfterGapsUniform,\n this.getColumnIndexesAfterAGap(model)\n ); // need min size of 1\n this.ctx.uniform1f(\n shader_program.gapSizeUniform,\n model.getGapSize()\n );\n\n this.ctx.uniformMatrix4fv(\n shader_program.pMatrixUniform,\n false,\n this.pMatrix\n );\n this.ctx.uniformMatrix4fv(\n shader_program.mvMatrixUniform,\n false,\n this.mvMatrix\n );\n this.ctx.uniform1f(\n shader_program.columnWidthUniform,\n model.getCellWidth(true) + model.getCellPadding(true)\n );\n this.ctx.uniform1f(shader_program.scrollXUniform, scroll_x);\n this.ctx.uniform1f(shader_program.scrollYUniform, scroll_y);\n this.ctx.uniform1f(shader_program.zoomXUniform, zoom_x);\n this.ctx.uniform1f(shader_program.zoomYUniform, zoom_y);\n this.ctx.uniform1f(shader_program.offsetYUniform, cell_top);\n this.ctx.uniform1f(\n shader_program.supersamplingRatioUniform,\n this.supersampling_ratio\n );\n this.ctx.uniform1f(\n shader_program.positionBitPackBaseUniform,\n this.position_bit_pack_base\n );\n if (forSpecificShapes) {\n const first_index = this.id_to_first_vertex_index[track_id][\n horz_first_id_in_window\n ];\n const first_index_out =\n horz_first_id_after_window === null\n ? buffers.position.specificShapesNumItems\n : this.id_to_first_vertex_index[track_id][\n horz_first_id_after_window\n ];\n this.ctx.drawArrays(\n this.ctx.TRIANGLES,\n first_index,\n first_index_out - first_index\n );\n } else {\n this.ext.drawArraysInstancedANGLE(\n this.ctx.TRIANGLES,\n 0,\n buffers.position.itemSize *\n buffers.position.universalShapesNumItems,\n horz_first_id_after_window_index -\n horz_first_id_in_window_index\n );\n }\n }\n }\n this.ctx.flush();\n this.renderColumnLabels(\n model,\n id_order.slice(\n horz_first_id_in_window_index,\n horz_first_id_after_window_index === -1\n ? undefined\n : horz_first_id_after_window_index\n )\n );\n\n // finally, refresh overlay (highlights)\n this.clearOverlay();\n this.highlightHighlightedIds(model);\n this.highlightHighlightedTracks(model);\n }\n\n private static getColumnLabelsFontSize(model: OncoprintModel) {\n return model.getCellWidth() / 2 + 2;\n }\n\n private prepareContextForColumnLabelText(\n model: OncoprintModel,\n ctx: CanvasRenderingContext2D\n ) {\n const font_size = OncoprintWebGLCellView.getColumnLabelsFontSize(model);\n const font_family = 'Arial';\n ctx.font = this.supersampling_ratio * font_size + 'px ' + font_family;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n }\n\n private renderColumnLabels(model: OncoprintModel, ids: ColumnId[]) {\n // first clear\n this.column_label_ctx.fillStyle = 'rgba(0,0,0,0)';\n this.column_label_ctx.clearRect(\n 0,\n 0,\n this.$column_label_canvas[0].width,\n this.$column_label_canvas[0].height\n );\n this.maximum_column_label_width = 0;\n this.maximum_column_label_height = 0;\n\n // continue to rendering\n const labels = model.getColumnLabels();\n\n // dont do anything if theres no labels\n if (Object.keys(labels).length === 0) {\n return;\n }\n\n const origin_y = this.getColumnLabelY(model);\n const x_map = model.getZoomedColumnLeft();\n const scroll_x = this.scroll_x;\n const cell_width = model.getCellWidth();\n\n this.prepareContextForColumnLabelText(model, this.column_label_ctx);\n for (let i = 0; i < ids.length; i++) {\n const label = labels[ids[i]];\n let label_height =\n this.column_label_ctx.measureText('m').width /\n this.supersampling_ratio;\n if (label) {\n const origin_x =\n (x_map[ids[i]] + cell_width / 2 - scroll_x) *\n this.supersampling_ratio;\n if (label.circle_color) {\n // draw circle if specified\n this.column_label_ctx.save();\n const circleSpec = this.getColumnLabelCircleSpec(model);\n label_height = Math.max(\n 2 * circleSpec.radius,\n label_height\n );\n this.column_label_ctx.translate(origin_x, origin_y);\n this.column_label_ctx.fillStyle = label.circle_color;\n this.column_label_ctx.beginPath();\n this.column_label_ctx.arc(\n 0,\n 0,\n this.supersampling_ratio * circleSpec.radius,\n 0,\n 2 * Math.PI\n );\n this.column_label_ctx.fill();\n this.column_label_ctx.restore();\n }\n this.column_label_ctx.save();\n const text_angle = this.getColumnLabelAngleRadians(label);\n const left_padding =\n ((label.left_padding_percent || 0) * cell_width) / 100;\n this.column_label_ctx.translate(origin_x, origin_y);\n this.column_label_ctx.rotate(text_angle);\n this.column_label_ctx.fillStyle =\n label.text_color || 'rgba(0,0,0,1)';\n this.column_label_ctx.fillText(\n label.text,\n left_padding * this.supersampling_ratio,\n 0\n );\n const text_width =\n this.column_label_ctx.measureText(label.text).width /\n this.supersampling_ratio;\n\n this.maximum_column_label_width = Math.max(\n this.maximum_column_label_width,\n Math.cos(text_angle) * text_width\n );\n\n this.maximum_column_label_height = Math.max(\n this.maximum_column_label_height,\n Math.sin(text_angle) * text_width,\n label_height\n );\n\n this.column_label_ctx.restore();\n }\n }\n }\n\n private getColumnLabelAngleRadians(label: ColumnLabel) {\n return (\n (ifndef(label.angle_in_degrees, COLUMN_LABEL_ANGLE) * Math.PI) / 180\n );\n }\n\n private getColumnLabelCircleSpec(model: OncoprintModel) {\n const radius = 0.9 * (model.getCellWidth() / 2);\n return { radius };\n }\n\n private ensureSimpleCountBuffer(model: OncoprintModel) {\n const numColumns = model.getIdOrder().length;\n if (\n !this.simple_count_buffer ||\n this.simple_count_buffer.numItems !== numColumns\n ) {\n const buffer = this.ctx.createBuffer() as OncoprintTrackBuffer;\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, buffer);\n this.ctx.bufferData(\n this.ctx.ARRAY_BUFFER,\n new Float32Array(_.range(0, numColumns)),\n this.ctx.STATIC_DRAW\n );\n buffer.itemSize = 1;\n buffer.numItems = numColumns;\n this.simple_count_buffer = buffer;\n }\n }\n\n private clearTrackPositionAndColorBuffers(\n model: OncoprintModel,\n track_id?: TrackId\n ) {\n let tracks_to_clear;\n if (typeof track_id === 'undefined') {\n tracks_to_clear = model.getTracks();\n } else {\n tracks_to_clear = [track_id];\n }\n for (let i = 0; i < tracks_to_clear.length; i++) {\n if (this.is_buffer_empty[tracks_to_clear[i]]) {\n this.is_buffer_empty[tracks_to_clear[i]].position = true;\n this.is_buffer_empty[tracks_to_clear[i]].color = true;\n this.is_buffer_empty[tracks_to_clear[i]].color_texture = true;\n }\n }\n }\n\n private clearTrackColumnBuffers(model: OncoprintModel, track_id?: TrackId) {\n let tracks_to_clear;\n if (typeof track_id === 'undefined') {\n tracks_to_clear = model.getTracks();\n } else {\n tracks_to_clear = [track_id];\n }\n for (let i = 0; i < tracks_to_clear.length; i++) {\n if (this.is_buffer_empty[tracks_to_clear[i]]) {\n this.is_buffer_empty[tracks_to_clear[i]].column = true;\n }\n }\n }\n\n private deleteBuffers(model: OncoprintModel, track_id?: TrackId) {\n let tracks_to_clear;\n if (typeof track_id === 'undefined') {\n tracks_to_clear = model.getTracks();\n } else {\n tracks_to_clear = [track_id];\n }\n for (let i = 0; i < tracks_to_clear.length; i++) {\n const track_id = tracks_to_clear[i];\n if (this.vertex_position_buffer[track_id]) {\n this.ctx.deleteBuffer(this.vertex_position_buffer[track_id]);\n delete this.vertex_position_buffer[track_id];\n }\n if (this.vertex_color_buffer[track_id]) {\n this.ctx.deleteBuffer(this.vertex_color_buffer[track_id]);\n delete this.vertex_color_buffer[track_id];\n }\n if (this.vertex_column_buffer[track_id]) {\n this.ctx.deleteBuffer(this.vertex_column_buffer[track_id]);\n delete this.vertex_column_buffer[track_id];\n }\n if (this.color_texture[track_id]) {\n this.ctx.deleteTexture(this.color_texture[track_id].texture);\n delete this.color_texture[track_id];\n }\n this.is_buffer_empty[track_id] = {\n position: true,\n color: true,\n color_texture: true,\n column: true,\n };\n }\n }\n\n private deleteSimpleCountBuffer(model: OncoprintModel) {\n if (this.simple_count_buffer) {\n this.ctx.deleteBuffer(this.simple_count_buffer);\n this.simple_count_buffer = null;\n }\n }\n\n private getTrackBuffers(track_id: TrackId) {\n this.is_buffer_empty[track_id] = this.is_buffer_empty[track_id] || {\n position: true,\n color: true,\n color_texture: true,\n column: true,\n };\n\n if (this.is_buffer_empty[track_id].position) {\n const pos_buffer =\n this.vertex_position_buffer[track_id] ||\n (this.ctx.createBuffer() as OncoprintVertexTrackBuffer);\n const pos_array = this.vertex_data[track_id].pos_array;\n const universal_shapes_start_index = this.vertex_data[track_id]\n .universal_shapes_start_index;\n\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, pos_buffer);\n this.ctx.bufferData(\n this.ctx.ARRAY_BUFFER,\n pos_array,\n this.ctx.STATIC_DRAW\n );\n pos_buffer.itemSize = 1;\n pos_buffer.specificShapesNumItems =\n universal_shapes_start_index / pos_buffer.itemSize;\n pos_buffer.universalShapesNumItems =\n (pos_array.length - universal_shapes_start_index) /\n pos_buffer.itemSize;\n\n this.vertex_position_buffer[track_id] = pos_buffer;\n }\n\n if (this.is_buffer_empty[track_id].color) {\n const col_buffer =\n this.vertex_color_buffer[track_id] ||\n (this.ctx.createBuffer() as OncoprintVertexTrackBuffer);\n const col_array = this.vertex_data[track_id].col_array;\n const universal_shapes_start_index = this.vertex_data[track_id]\n .universal_shapes_start_index;\n\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, col_buffer);\n this.ctx.bufferData(\n this.ctx.ARRAY_BUFFER,\n col_array,\n this.ctx.STATIC_DRAW\n );\n col_buffer.itemSize = 1;\n col_buffer.specificShapesNumItems =\n universal_shapes_start_index / col_buffer.itemSize;\n col_buffer.universalShapesNumItems =\n (col_array.length - universal_shapes_start_index) /\n col_buffer.itemSize;\n\n this.vertex_color_buffer[track_id] = col_buffer;\n }\n\n if (this.is_buffer_empty[track_id].color_texture) {\n const tex = this.color_texture[track_id]\n ? this.color_texture[track_id].texture\n : this.ctx.createTexture();\n this.ctx.bindTexture(this.ctx.TEXTURE_2D, tex);\n\n const color_bank = this.vertex_data[track_id].col_bank;\n const width = Math.pow(\n 2,\n Math.ceil((Math as any).log2(color_bank.length / 4))\n );\n while (color_bank.length < 4 * width) {\n color_bank.push(0);\n }\n const height = 1;\n this.ctx.texImage2D(\n this.ctx.TEXTURE_2D,\n 0,\n this.ctx.RGBA,\n width,\n height,\n 0,\n this.ctx.RGBA,\n this.ctx.UNSIGNED_BYTE,\n new Uint8Array(color_bank)\n );\n this.ctx.texParameteri(\n this.ctx.TEXTURE_2D,\n this.ctx.TEXTURE_MIN_FILTER,\n this.ctx.NEAREST\n );\n this.ctx.texParameteri(\n this.ctx.TEXTURE_2D,\n this.ctx.TEXTURE_MAG_FILTER,\n this.ctx.NEAREST\n );\n this.color_texture[track_id] = { texture: tex, size: width };\n }\n\n if (this.is_buffer_empty[track_id].column) {\n const vertex_column_buffer =\n this.vertex_column_buffer[track_id] ||\n (this.ctx.createBuffer() as OncoprintTrackBuffer);\n const vertex_column_array = this.vertex_column_array[track_id];\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, vertex_column_buffer);\n this.ctx.bufferData(\n this.ctx.ARRAY_BUFFER,\n vertex_column_array,\n this.ctx.STATIC_DRAW\n );\n vertex_column_buffer.itemSize = 1;\n vertex_column_buffer.numItems =\n vertex_column_array.length / vertex_column_buffer.itemSize;\n\n this.vertex_column_buffer[track_id] = vertex_column_buffer;\n }\n this.is_buffer_empty[track_id] = {\n position: false,\n color: false,\n column: false,\n color_texture: false,\n };\n\n return {\n position: this.vertex_position_buffer[track_id],\n color: this.vertex_color_buffer[track_id],\n color_tex: this.color_texture[track_id],\n column: this.vertex_column_buffer[track_id],\n };\n }\n\n private computeVertexColumns(model: OncoprintModel, track_id: TrackId) {\n if (this.rendering_suppressed) {\n return;\n }\n const num_items = this.vertex_data[track_id].pos_array.length;\n const id_to_first_vertex_index = this.id_to_first_vertex_index[\n track_id\n ];\n const id_to_index = model.getVisibleIdToIndexMap();\n const id_and_first_vertex: [ColumnId, number][] = Object.keys(\n id_to_first_vertex_index\n )\n .map(function(id) {\n return [id, id_to_first_vertex_index[id]] as [ColumnId, number];\n })\n .sort(function(a, b) {\n return sgndiff(a[1], b[1]);\n });\n const vertex_column_array = new Float32Array(num_items);\n let vertex_index = 0;\n for (let i = 0; i < id_and_first_vertex.length; i++) {\n const num_to_add =\n (i === id_and_first_vertex.length - 1\n ? num_items\n : id_and_first_vertex[i + 1][1]) -\n id_and_first_vertex[i][1];\n const column = id_to_index[id_and_first_vertex[i][0]];\n for (let j = 0; j < num_to_add; j++) {\n vertex_column_array[vertex_index] = column;\n vertex_index += 1;\n }\n }\n this.vertex_column_array[track_id] = vertex_column_array;\n this.clearTrackColumnBuffers(model, track_id);\n }\n\n private computeVertexPositionsAndVertexColors(\n model: OncoprintModel,\n track_id: TrackId\n ) {\n if (this.rendering_suppressed) {\n return;\n }\n\n // check simple count buffer whenever we recompute vertexes\n this.ensureSimpleCountBuffer(model);\n\n const universal_shapes = this.universal_shapes[track_id];\n const id_to_index = model.getIdToIndexMap();\n const specific_shapes = _.sortBy(\n this.specific_shapes[track_id],\n o => id_to_index[o.id]\n );\n // Compute vertex array\n const num_vertexes =\n _.sumBy(specific_shapes, (shapeList: IdentifiedShapeList) => {\n return _.sumBy(shapeList.shape_list, getNumWebGLVertexes);\n }) +\n (universal_shapes\n ? _.sumBy(universal_shapes, getNumWebGLVertexes)\n : 0);\n const vertex_pos_array = new Float32Array(num_vertexes);\n const vertex_col_array = new Float32Array(num_vertexes);\n\n // original values dont mean anything but its faster to create an object with all the keys\n // already in it than to slowly grow it\n const id_to_first_vertex_index: {\n [columnId: string]: number;\n } = _.clone(id_to_index);\n\n const color_vertexes: ColorVertex[] = [];\n const color_bank_index: { [colorHash: string]: ColorBankIndex } = {};\n\n const position_bit_pack_base = this.position_bit_pack_base;\n function packPos(posVertex: number[]) {\n // values must be in [0,255] (integer)\n return (\n position_bit_pack_base * position_bit_pack_base * posVertex[0] +\n position_bit_pack_base * posVertex[1] +\n posVertex[2]\n );\n }\n\n const vertexifiedShapes: {\n [shapeHash: string]: { position: number[]; color: number[] };\n } = {};\n let vertex_array_index = 0;\n\n function addShapeVertexes(_shape: ComputedShapeParams, zindex: number) {\n const hash = Shape.hashComputedShape(_shape, zindex);\n if (!(hash in vertexifiedShapes)) {\n vertexifiedShapes[hash] = { position: [], color: [] };\n const position = vertexifiedShapes[hash].position;\n const color = vertexifiedShapes[hash].color;\n shapeToVertexes(_shape, zindex, function(\n pos: PositionVertex,\n col: ColorVertex\n ) {\n pos = pos.map(Math.round) as PositionVertex;\n\n position.push(packPos(pos));\n\n const col_hash = `${col[0]},${col[1]},${col[2]},${col[3]}`;\n let col_index = color_bank_index[col_hash];\n if (typeof col_index === 'undefined') {\n col_index = color_vertexes.length;\n color_vertexes.push(col);\n color_bank_index[col_hash] = col_index;\n }\n color.push(col_index);\n });\n }\n const positionVertexes = vertexifiedShapes[hash].position;\n const colorVertexes = vertexifiedShapes[hash].color;\n for (let i = 0; i < positionVertexes.length; i++) {\n vertex_pos_array[vertex_array_index] = positionVertexes[i];\n vertex_col_array[vertex_array_index] = colorVertexes[i];\n vertex_array_index += 1;\n }\n }\n\n for (let i = 0; i < specific_shapes.length; i++) {\n const shape_list = specific_shapes[i].shape_list;\n const id = specific_shapes[i].id;\n\n id_to_first_vertex_index[id] = vertex_array_index;\n\n for (let j = 0; j < shape_list.length; j++) {\n const shape = shape_list[j];\n addShapeVertexes(shape, j);\n }\n }\n\n // record start index of universal shapes\n const universal_shapes_start_index = vertex_array_index;\n if (universal_shapes) {\n for (let j = 0; j < universal_shapes.length; j++) {\n const shape = universal_shapes[j];\n addShapeVertexes(shape, j);\n }\n }\n\n const color_bank: ColorBank = color_vertexes.reduce(function(\n arr,\n next\n ) {\n return arr.concat(next);\n },\n []);\n // minimum color bank to avoid webGL texture errors\n if (color_bank.length === 0) {\n color_bank.push(0, 0, 0, 0);\n }\n this.vertex_data[track_id] = {\n pos_array: vertex_pos_array,\n col_array: vertex_col_array,\n col_bank: color_bank,\n universal_shapes_start_index,\n };\n this.id_to_first_vertex_index[track_id] = id_to_first_vertex_index;\n\n this.clearTrackPositionAndColorBuffers(model, track_id);\n }\n\n private getShapes(model: OncoprintModel, track_id: TrackId) {\n if (this.rendering_suppressed) {\n return;\n }\n this.specific_shapes[track_id] = model.getSpecificShapesForData(\n track_id,\n true\n );\n this.universal_shapes[track_id] = model.getTrackUniversalShapes(\n track_id,\n true\n );\n }\n\n private refreshCanvas(model: OncoprintModel) {\n // whenever you get a new context, you have to get new buffers\n this.deleteBuffers(model);\n this.deleteSimpleCountBuffer(model);\n this.getNewCanvas();\n this.getWebGLContextAndSetUpMatrices();\n this.setUpShaders(model);\n this.ensureSimpleCountBuffer(model);\n }\n\n private highlightCell(\n model: OncoprintModel,\n track_id: TrackId,\n uid: ColumnId\n ) {\n this.overlayStrokeRect(\n model.getZoomedColumnLeft(uid) - this.scroll_x,\n model.getCellTops(track_id) - this.scroll_y,\n model.getCellWidth() +\n (model.getTrackHasColumnSpacing(track_id)\n ? 0\n : model.getCellPadding()),\n model.getCellHeight(track_id),\n 'rgba(0,0,0,1)'\n );\n }\n\n private highlightTrack(model: OncoprintModel, track_id: TrackId) {\n const highlight_width =\n model.getCellWidth() +\n (model.getTrackHasColumnSpacing(track_id)\n ? 0\n : model.getCellPadding());\n const cell_height = model.getCellHeight(track_id);\n const uids = model.getIdOrder();\n const left = model.getZoomedColumnLeft();\n const top = model.getCellTops(track_id) - this.scroll_y;\n\n for (const uid of uids) {\n if (model.getTrackDatum(track_id, uid) !== null && uid in left) {\n this.overlayStrokeRect(\n left[uid] - this.scroll_x,\n top,\n highlight_width,\n cell_height,\n CELL_HIGHLIGHT_STROKE\n );\n }\n }\n }\n\n private highlightColumn(model: OncoprintModel, uid: ColumnId) {\n const left = model.getZoomedColumnLeft(uid) - this.scroll_x;\n const cell_padding = model.getCellPadding();\n const cell_width = model.getCellWidth();\n const tracks = model.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n if (model.getTrackDatum(tracks[i], uid) !== null) {\n this.overlayStrokeRect(\n left,\n model.getCellTops(tracks[i]) - this.scroll_y,\n cell_width +\n (model.getTrackHasColumnSpacing(tracks[i])\n ? 0\n : cell_padding),\n model.getCellHeight(tracks[i]),\n CELL_HIGHLIGHT_STROKE\n );\n }\n }\n this.overlayColumnLabelHighlight(model, uid);\n }\n\n public getViewportOncoprintSpace(model: OncoprintModel) {\n const scroll_y = this.scroll_y;\n const zoom_y = model.getVertZoom();\n\n const id_order = model.getIdOrder();\n const left_index = model.getClosestColumnIndexToLeft(\n this.scroll_x,\n true\n );\n const left_id = id_order[left_index];\n const right_index = model.getClosestColumnIndexToLeft(\n this.scroll_x + this.visible_area_width,\n true,\n true\n );\n\n let right;\n if (right_index < id_order.length) {\n right = model.getColumnLeft(id_order[right_index]);\n } else {\n right =\n model.getColumnLeft(id_order[id_order.length - 1]) +\n model.getCellWidth(true);\n }\n\n return {\n top: Math.round(scroll_y / zoom_y),\n bottom: Math.round(\n (scroll_y + this.getVisibleAreaHeight(model)) / zoom_y\n ),\n left: model.getColumnLeft(left_id),\n right,\n center_col_index: Math.floor((right_index + left_index) / 2),\n };\n }\n\n public isUsable() {\n return this.ctx !== null;\n }\n\n public removeTrack(model: OncoprintModel, track_id: TrackId) {\n this.deleteBuffers(model, track_id);\n\n delete this.specific_shapes[track_id];\n delete this.vertex_data[track_id];\n delete this.vertex_column_array[track_id];\n delete this.id_to_first_vertex_index[track_id];\n delete this.is_buffer_empty[track_id];\n delete this.universal_shapes[track_id];\n\n if (!this.rendering_suppressed) {\n this.renderAllTracks(model);\n }\n }\n\n public moveTrack(model: OncoprintModel) {\n if (!this.rendering_suppressed) {\n this.renderAllTracks(model);\n }\n }\n\n public setTrackGroupOrder(model: OncoprintModel) {\n if (!this.rendering_suppressed) {\n this.renderAllTracks(model);\n }\n }\n\n public setTrackShowGaps(model: OncoprintModel) {\n if (!this.rendering_suppressed) {\n // shader depends on gaps\n this.setUpShaders(model);\n this.renderAllTracks(model);\n }\n }\n\n public setColumnLabels(model: OncoprintModel) {\n if (!this.rendering_suppressed) {\n this.renderAllTracks(model);\n }\n }\n\n public addTracks(model: OncoprintModel, track_ids: TrackId[]) {\n if (this.rendering_suppressed) {\n return;\n }\n for (let i = 0; i < track_ids.length; i++) {\n this.getShapes(model, track_ids[i]);\n this.computeVertexPositionsAndVertexColors(model, track_ids[i]);\n this.computeVertexColumns(model, track_ids[i]);\n }\n this.renderAllTracks(model);\n }\n public setIdOrder(model: OncoprintModel, ids: ColumnId[]) {\n if (this.rendering_suppressed) {\n return;\n }\n const track_ids = model.getTracks();\n for (let i = 0; i < track_ids.length; i++) {\n this.computeVertexColumns(model, track_ids[i]);\n }\n this.renderAllTracks(model);\n }\n public setTrackGroupSortPriority(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n this.renderAllTracks(model);\n }\n public sort(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n const track_ids = model.getTracks();\n for (let i = 0; i < track_ids.length; i++) {\n this.computeVertexPositionsAndVertexColors(model, track_ids[i]); // need to recompute because the vertexes are in sorted order for clipping\n this.computeVertexColumns(model, track_ids[i]);\n }\n this.renderAllTracks(model);\n }\n public suppressRendering() {\n this.rendering_suppressed = true;\n }\n public releaseRendering(model: OncoprintModel) {\n this.rendering_suppressed = false;\n this.updateAntialiasSetting(model);\n const track_ids = model.getTracks();\n for (let i = 0; i < track_ids.length; i++) {\n this.getShapes(model, track_ids[i]);\n this.computeVertexPositionsAndVertexColors(model, track_ids[i]);\n this.computeVertexColumns(model, track_ids[i]);\n }\n this.setUpShaders(model); // due to possible changes in gaps\n this.renderAllTracks(model);\n }\n public hideIds(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n const track_ids = model.getTracks();\n for (let i = 0; i < track_ids.length; i++) {\n this.computeVertexColumns(model, track_ids[i]);\n }\n this.renderAllTracks(model);\n }\n public setTrackImportantIds(model: OncoprintModel, track_id: TrackId) {\n if (this.rendering_suppressed) {\n return;\n }\n this.getShapes(model, track_id);\n this.computeVertexPositionsAndVertexColors(model, track_id);\n this.computeVertexColumns(model, track_id);\n this.renderAllTracks(model);\n }\n public setTrackData(model: OncoprintModel, track_id: TrackId) {\n if (this.rendering_suppressed) {\n return;\n }\n this.getShapes(model, track_id);\n this.computeVertexPositionsAndVertexColors(model, track_id);\n this.computeVertexColumns(model, track_id);\n this.renderAllTracks(model);\n }\n public setRuleSet(model: OncoprintModel, target_track_id: TrackId) {\n if (this.rendering_suppressed) {\n return;\n }\n this.getShapes(model, target_track_id);\n this.computeVertexPositionsAndVertexColors(model, target_track_id);\n this.renderAllTracks(model);\n }\n public shareRuleSet(model: OncoprintModel, target_track_id: TrackId) {\n if (this.rendering_suppressed) {\n return;\n }\n this.getShapes(model, target_track_id);\n this.computeVertexPositionsAndVertexColors(model, target_track_id);\n this.renderAllTracks(model);\n }\n public setSortConfig(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n this.sort(model);\n }\n\n public setHorzScroll(model: OncoprintModel) {\n this.setScroll(model);\n }\n\n public setVertScroll(model: OncoprintModel) {\n this.setScroll(model);\n }\n\n public setScroll(model: OncoprintModel) {\n this.scroll_x = model.getHorzScroll();\n this.scroll_y = model.getVertScroll();\n if (!this.rendering_suppressed) {\n this.renderAllTracks(model, true);\n }\n }\n\n private updateAntialiasSetting(model: OncoprintModel) {\n const cell_width = model.getCellWidth();\n if (cell_width < this.antialias_on_cell_width_thresh) {\n if (!this.antialias) {\n this.antialias = true;\n this.refreshCanvas(model);\n }\n } else {\n if (this.antialias) {\n this.antialias = false;\n this.refreshCanvas(model);\n }\n }\n }\n\n public setZoom(model: OncoprintModel) {\n if (!this.rendering_suppressed) {\n this.updateAntialiasSetting(model);\n this.renderAllTracks(model);\n }\n }\n\n public setHorzZoom(model: OncoprintModel) {\n if (!this.rendering_suppressed) {\n this.updateAntialiasSetting(model);\n this.renderAllTracks(model);\n }\n }\n\n public setVertZoom(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n this.renderAllTracks(model);\n }\n\n public setTrackGroupHeader(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n this.renderAllTracks(model);\n }\n\n public setViewport(model: OncoprintModel) {\n this.scroll_x = model.getHorzScroll();\n this.scroll_y = model.getVertScroll();\n if (!this.rendering_suppressed) {\n this.updateAntialiasSetting(model);\n this.renderAllTracks(model);\n }\n }\n\n public getTotalWidth(model: OncoprintModel, base?: boolean) {\n let width = model.getOncoprintWidth(base);\n\n if (this.maximum_column_label_width > 0) {\n width += this.maximum_column_label_width;\n }\n\n return width;\n }\n\n public getVisibleAreaWidth() {\n return this.visible_area_width;\n }\n\n public setWidth(w: number, model: OncoprintModel) {\n this.visible_area_width = w;\n if (this.rendering_suppressed) {\n return;\n }\n this.renderAllTracks(model); // in the process it will call resizeAndClear\n }\n\n private getColumnLabelsHeight() {\n let height = 0;\n\n if (this.maximum_column_label_height > 0) {\n height += COLUMN_LABEL_MARGIN;\n height += this.maximum_column_label_height;\n }\n\n return height;\n }\n\n public getTotalHeight(model: OncoprintModel) {\n return model.getOncoprintHeight() + this.getColumnLabelsHeight();\n }\n\n public getVisibleAreaHeight(model: OncoprintModel) {\n return (\n Math.min(model.getOncoprintHeight(), model.max_height) +\n this.getColumnLabelsHeight()\n );\n }\n\n public setCellPaddingOn(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n const track_ids = model.getTracks();\n for (let i = 0; i < track_ids.length; i++) {\n if (!model.getTrackHasColumnSpacing(track_ids[i])) {\n // We need to recompute shapes for tracks that don't have column spacing,\n // because for those we're redefining the base width for shape generation.\n this.getShapes(model, track_ids[i]);\n this.computeVertexPositionsAndVertexColors(model, track_ids[i]);\n }\n this.computeVertexColumns(model, track_ids[i]);\n }\n this.renderAllTracks(model);\n }\n\n public setHighlightedIds(model: OncoprintModel) {\n this.clearOverlay();\n this.highlightHighlightedIds(model);\n this.highlightHighlightedTracks(model);\n }\n\n public setHighlightedTracks(model: OncoprintModel) {\n this.clearOverlay();\n this.highlightHighlightedIds(model);\n this.highlightHighlightedTracks(model);\n }\n\n public highlightHighlightedIds(\n model: OncoprintModel,\n opt_exclude_ids?: ColumnId[]\n ) {\n // Highlight highlighted ids\n const highlightedIds = model.getVisibleHighlightedIds();\n for (let i = 0; i < highlightedIds.length; i++) {\n if (\n !opt_exclude_ids ||\n opt_exclude_ids.indexOf(highlightedIds[i]) === -1\n ) {\n this.highlightColumn(model, highlightedIds[i]);\n }\n }\n }\n\n public highlightHighlightedTracks(model: OncoprintModel) {\n // Highlight highlighted ids\n const highlightedTracks = model.getHighlightedTracks();\n for (let i = 0; i < highlightedTracks.length; i++) {\n this.highlightTrack(model, highlightedTracks[i]);\n }\n }\n\n public getDummyScrollDivClientSize() {\n return this.dummy_scroll_div_client_size.get();\n }\n\n public toSVGGroup(\n model: OncoprintModel,\n offset_x: number,\n offset_y: number\n ) {\n const root = svgfactory.group(offset_x || 0, offset_y || 0);\n const cell_tops = model.getCellTops();\n const tracks = model.getTracks();\n const zoomedColumnLeft = model.getZoomedColumnLeft();\n // add cell shapes\n for (let i = 0; i < tracks.length; i++) {\n const track_id = tracks[i];\n const offset_y = cell_tops[track_id];\n const universal_shapes = model.getTrackUniversalShapes(\n track_id,\n false\n );\n const identified_shape_list_list = model.getSpecificShapesForData(\n track_id,\n false\n );\n for (let j = 0; j < identified_shape_list_list.length; j++) {\n const id_sl = identified_shape_list_list[j];\n const id = id_sl.id;\n const sl = id_sl.shape_list;\n const offset_x = zoomedColumnLeft[id];\n if (typeof offset_x === 'undefined') {\n // hidden id\n continue;\n }\n\n // draw universal shapes first\n for (let h = 0; h < universal_shapes.length; h++) {\n root.appendChild(\n svgfactory.fromShape(\n universal_shapes[h],\n offset_x,\n offset_y\n )\n );\n }\n // next draw specific shapes\n for (let h = 0; h < sl.length; h++) {\n root.appendChild(\n svgfactory.fromShape(sl[h], offset_x, offset_y)\n );\n }\n }\n }\n // add column labels\n const labels = model.getColumnLabels();\n const left = model.getZoomedColumnLeft();\n const ids_with_labels = Object.keys(labels);\n const column_label_y = model.getOncoprintHeight() + 10;\n const font_size = OncoprintWebGLCellView.getColumnLabelsFontSize(model);\n const cell_width = model.getCellWidth();\n for (let i = 0; i < ids_with_labels.length; i++) {\n const id = ids_with_labels[i];\n\n if (!(id in left)) {\n // skip hidden id\n continue;\n }\n\n const label = labels[id];\n\n const x = left[id] + cell_width / 2;\n if (label.circle_color) {\n // add circle\n const spec = this.getColumnLabelCircleSpec(model);\n root.appendChild(\n makeSvgElement('ellipse', {\n cx: x,\n cy: column_label_y,\n rx: spec.radius,\n ry: spec.radius,\n stroke: 'rgba(0,0,0,0)',\n fill: label.circle_color,\n })\n );\n }\n\n const text_x =\n x + ((label.left_padding_percent || 0) / 100) * cell_width;\n\n const angle = ifndef(label.angle_in_degrees, COLUMN_LABEL_ANGLE);\n const textElt = makeSvgElement('text', {\n x: text_x,\n y: column_label_y,\n fill: label.text_color || '#000000',\n 'font-size': font_size,\n 'font-family': 'Arial',\n 'font-weight': 'normal',\n 'text-anchor': 'start',\n transform:\n 'rotate(' +\n angle +\n ',' +\n text_x +\n ',' +\n column_label_y +\n ')',\n 'alignment-baseline': 'middle',\n });\n\n textElt.textContent = label.text;\n root.appendChild(textElt);\n }\n\n return root;\n }\n\n public destroy() {\n this.$overlay_canvas.off(); // clear all handlers so that it can be garbage collected\n $(document).off('mousemove', this.mouseMoveHandler);\n }\n}\n","import svgfactory from './svgfactory';\nimport $ from 'jquery';\nimport makeSvgElement from './makesvgelement';\nimport OncoprintModel, { TrackId, TrackProp } from './oncoprintmodel';\nimport OncoprintToolTip from './oncoprinttooltip';\nimport Oncoprint from './oncoprint';\n\nconst CIRCLE_X = 25;\n\nexport default class OncoprintLabelView {\n private supersampling_ratio = 2;\n private base_font_size = 14;\n // stuff from model\n private track_tops: TrackProp<number> = {};\n private cell_tops: TrackProp<number> = {};\n private cell_tops_view_space: TrackProp<number> = {};\n private cell_tops_this_space: TrackProp<number> = {};\n private cell_heights: TrackProp<number> = {};\n private cell_heights_view_space: TrackProp<number> = {};\n private cell_heights_this_space: TrackProp<number> = {};\n private label_middles_view_space: TrackProp<number> = {};\n private label_middles_this_space: TrackProp<number> = {};\n private label_left_padding: TrackProp<number> = {};\n private labels: TrackProp<string> = {};\n private sublabels: TrackProp<string> = {};\n private label_colors: TrackProp<string> = {};\n private label_circle_colors: TrackProp<string> = {};\n private label_font_weight: TrackProp<string> = {};\n private html_labels: TrackProp<string> = {};\n private track_link_urls: TrackProp<string> = {};\n private track_descriptions: TrackProp<string> = {};\n private minimum_track_height = Number.POSITIVE_INFINITY;\n private maximum_label_width = Number.NEGATIVE_INFINITY;\n private tracks: TrackId[] = [];\n private show_sublabels: boolean;\n\n private rendering_suppressed = false;\n private highlighted_track_label_only: TrackId | null = null;\n private drag_callback: (\n target_track: TrackId,\n new_previous_track: TrackId\n ) => void;\n private dragged_label_track_id: TrackId | null;\n private drag_mouse_y: number | null;\n private scroll_y: number = 0;\n private ctx: CanvasRenderingContext2D;\n\n constructor(\n private $canvas: JQuery<HTMLCanvasElement>,\n private model: OncoprintModel,\n private tooltip: OncoprintToolTip\n ) {\n const view = this;\n this.show_sublabels = model.getShowTrackSublabels();\n\n this.setUpContext();\n\n (function setUpDragging(view) {\n view.drag_callback = function(target_track, new_previous_track) {};\n view.dragged_label_track_id = null;\n view.drag_mouse_y = null;\n\n view.$canvas.on('mousedown', function(evt) {\n view.tooltip.hide();\n const track_id = view.isMouseOnLabel(evt.offsetY);\n if (\n track_id !== null &&\n model.getContainingTrackGroup(track_id).length > 1 &&\n !model.isTrackInClusteredGroup(track_id) &&\n model.getTrackMovable(track_id)\n ) {\n view.startDragging(model, track_id, evt.offsetY);\n }\n });\n\n view.$canvas.on('mousemove', function(evt) {\n if (view.dragged_label_track_id !== null) {\n const track_group = model.getContainingTrackGroup(\n view.dragged_label_track_id\n );\n const bottommost_track = model.getLastExpansion(\n track_group[track_group.length - 1]\n );\n const max_drag_y =\n view.track_tops[bottommost_track] +\n model.getTrackHeight(bottommost_track) -\n view.scroll_y;\n const min_drag_y =\n view.track_tops[track_group[0]] - 5 - view.scroll_y;\n view.drag_mouse_y = Math.min(\n evt.pageY - view.$canvas.offset().top,\n max_drag_y\n );\n view.drag_mouse_y = Math.max(view.drag_mouse_y, min_drag_y);\n view.renderAllLabels(model);\n } else {\n const hovered_track = view.isMouseOnLabel(\n evt.pageY - view.$canvas.offset().top\n );\n if (hovered_track !== null) {\n const $tooltip_div = $('<div>');\n const offset = view.$canvas[0].getBoundingClientRect();\n if (\n view.isNecessaryToShortenLabel(\n view.labels[hovered_track]\n ) ||\n view.track_link_urls[hovered_track]\n ) {\n $tooltip_div.append(\n OncoprintLabelView.formatTooltipHeader(\n view.labels[hovered_track],\n view.html_labels[hovered_track],\n view.track_link_urls[hovered_track]\n )\n );\n }\n const track_description =\n view.track_descriptions[hovered_track];\n if (track_description.length > 0) {\n $tooltip_div.append(\n $('<div>').text(track_description)\n );\n }\n // dragging info\n if (model.getTrackMovable(hovered_track)) {\n if (model.isTrackInClusteredGroup(hovered_track)) {\n view.$canvas.css('cursor', 'not-allowed');\n $tooltip_div.append(\n '<b>dragging disabled for clustered tracks</b>'\n );\n } else if (\n model.getContainingTrackGroup(hovered_track)\n .length > 1\n ) {\n view.$canvas.css('cursor', 'move');\n $tooltip_div.append('<b>hold to drag</b>');\n }\n }\n if ($tooltip_div.contents().length > 0) {\n view.tooltip.fadeIn(\n 200,\n view.renderedLabelWidth(\n view.labels[hovered_track]\n ) + offset.left,\n view.cell_tops[hovered_track] +\n offset.top -\n view.scroll_y,\n $tooltip_div\n );\n }\n } else {\n view.$canvas.css('cursor', 'auto');\n view.tooltip.hide();\n }\n }\n });\n\n view.$canvas.on('mouseup mouseleave', function(evt) {\n if (view.dragged_label_track_id !== null) {\n const track_group = model.getContainingTrackGroup(\n view.dragged_label_track_id\n );\n const previous_track_id = view.getLabelAboveMouseSpace(\n track_group,\n evt.offsetY,\n view.dragged_label_track_id\n );\n view.stopDragging(model, previous_track_id);\n }\n view.tooltip.hideIfNotAlreadyGoingTo(150);\n });\n })(this);\n }\n\n private circleRadius() {\n return (this.minimum_track_height * 0.8) / 2;\n }\n\n private renderedLabelWidth(label: string) {\n return (\n this.ctx.measureText(this.shortenLabelIfNecessary(label)).width /\n this.supersampling_ratio\n );\n }\n\n private updateFromModel(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n this.show_sublabels = model.getShowTrackSublabels();\n this.scroll_y = model.getVertScroll();\n this.track_tops = model.getZoomedTrackTops() as TrackProp<number>;\n this.cell_tops = model.getCellTops() as TrackProp<number>;\n this.cell_tops_this_space = {};\n this.cell_heights = {};\n this.tracks = model.getTracks();\n this.track_descriptions = {};\n\n this.ctx.font = 'bold ' + this.getFontSize() + 'px Arial';\n this.minimum_track_height = Number.POSITIVE_INFINITY;\n this.maximum_label_width = 0;\n for (let i = 0; i < this.tracks.length; i++) {\n this.minimum_track_height = Math.min(\n this.minimum_track_height,\n model.getTrackHeight(this.tracks[i])\n );\n const shortened_label = this.shortenLabelIfNecessary(\n this.labels[this.tracks[i]]\n );\n const shortened_sublabel = this.shortenLabelIfNecessary(\n this.sublabels[this.tracks[i]]\n );\n const measured_width =\n this.ctx.measureText(shortened_label).width +\n (this.show_sublabels\n ? this.ctx.measureText(shortened_sublabel).width\n : 0);\n this.maximum_label_width = Math.max(\n this.maximum_label_width,\n measured_width\n );\n\n this.cell_tops_this_space[this.tracks[i]] =\n this.cell_tops[this.tracks[i]] * this.supersampling_ratio -\n this.scroll_y * this.supersampling_ratio;\n this.track_descriptions[this.tracks[i]] = model.getTrackDescription(\n this.tracks[i]\n );\n this.cell_heights[this.tracks[i]] = model.getCellHeight(\n this.tracks[i]\n );\n this.cell_heights_this_space[this.tracks[i]] =\n this.cell_heights[this.tracks[i]] * this.supersampling_ratio;\n this.label_middles_this_space[this.tracks[i]] =\n this.cell_tops_this_space[this.tracks[i]] +\n this.cell_heights_this_space[this.tracks[i]] / 2;\n }\n }\n private setUpContext() {\n this.ctx = this.$canvas[0].getContext('2d');\n this.ctx.textAlign = 'start';\n this.ctx.textBaseline = 'middle';\n }\n private resizeAndClear(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n if (this.rendering_suppressed) {\n return;\n }\n const visible_height = getCellViewHeight();\n const visible_width = this.getWidth();\n this.$canvas[0].height = this.supersampling_ratio * visible_height;\n this.$canvas[0].width = this.supersampling_ratio * visible_width;\n this.$canvas[0].style.height = visible_height + 'px';\n this.$canvas[0].style.width = visible_width + 'px';\n this.setUpContext();\n }\n private isNecessaryToShortenLabel(label: string) {\n return label.length > this.getMaximumLabelLength();\n }\n private shortenLabelIfNecessary(label: string) {\n if (this.isNecessaryToShortenLabel(label)) {\n return label.substring(0, this.getMaximumLabelLength() - 3) + '...';\n } else {\n return label;\n }\n }\n private static formatTooltipHeader(\n label: string,\n html_label: any,\n link_url: string\n ) {\n let header_contents;\n if (link_url) {\n header_contents = $(\n '<a target=\"_blank\" rel=\"noopener noreferrer\">'\n ).attr('href', link_url);\n } else {\n header_contents = $('<span>');\n }\n header_contents.append(html_label || document.createTextNode(label));\n return $('<b style=\"display: block;\">').append(header_contents);\n }\n private renderAllLabels(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n this.ctx.clearRect(0, 0, this.$canvas[0].width, this.$canvas[0].height);\n\n const highlightedTracks = [];\n highlightedTracks.push(...model.getHighlightedTracks());\n if (this.highlighted_track_label_only !== null) {\n highlightedTracks.push(this.highlighted_track_label_only);\n }\n for (const track_id of highlightedTracks) {\n if (this.cell_tops_this_space.hasOwnProperty(track_id)) {\n this.ctx.fillStyle = 'rgba(255,255,0,0.4)';\n this.ctx.fillRect(\n 0,\n this.cell_tops_this_space[track_id],\n this.getWidth() * this.supersampling_ratio,\n this.cell_heights_this_space[track_id]\n );\n }\n }\n const font_size = this.getFontSize();\n const tracks = this.tracks;\n const sublabelX: TrackProp<number> = {};\n for (let i = 0; i < tracks.length; i++) {\n if (this.label_circle_colors[tracks[i]]) {\n // draw circle if specified\n this.ctx.fillStyle = this.label_circle_colors[tracks[i]];\n this.ctx.beginPath();\n this.ctx.arc(\n CIRCLE_X * this.supersampling_ratio,\n this.label_middles_this_space[tracks[i]],\n this.supersampling_ratio * this.circleRadius(),\n 0,\n 2 * Math.PI\n );\n this.ctx.fill();\n }\n\n this.ctx.font =\n (this.label_font_weight[tracks[i]] || 'bold') +\n ' ' +\n font_size +\n 'px Arial';\n this.ctx.fillStyle = 'black';\n if (this.label_colors && this.label_colors[tracks[i]]) {\n //override color, if set:\n this.ctx.fillStyle = this.label_colors[tracks[i]];\n }\n const label = this.shortenLabelIfNecessary(this.labels[tracks[i]]);\n this.ctx.fillText(\n label,\n this.label_left_padding[tracks[i]] * this.supersampling_ratio,\n this.label_middles_this_space[tracks[i]]\n );\n sublabelX[tracks[i]] = this.ctx.measureText(label).width;\n }\n if (this.show_sublabels) {\n // render sublabels - not bold, gray\n this.ctx.font = font_size + 'px Arial';\n this.ctx.fillStyle = 'rgb(166,166,166)';\n for (let i = 0; i < tracks.length; i++) {\n if (this.sublabels[tracks[i]]) {\n this.ctx.fillText(\n this.shortenLabelIfNecessary(this.sublabels[tracks[i]]),\n sublabelX[tracks[i]],\n this.label_middles_this_space[tracks[i]]\n );\n }\n }\n }\n if (this.dragged_label_track_id !== null) {\n this.ctx.font = 'bold ' + font_size + 'px Arial';\n this.ctx.fillStyle = 'rgba(255,0,0,0.95)';\n this.ctx.fillText(\n this.shortenLabelIfNecessary(\n this.labels[this.dragged_label_track_id]\n ),\n 0,\n this.supersampling_ratio * this.drag_mouse_y\n );\n this.ctx.fillStyle = 'rgba(0,0,0,0.15)';\n const group = this.model.getContainingTrackGroup(\n this.dragged_label_track_id\n );\n const label_above_mouse = this.model.getLastExpansion(\n this.getLabelAboveMouseSpace(group, this.drag_mouse_y, null)\n );\n const label_below_mouse = this.getLabelBelowMouseSpace(\n group,\n this.drag_mouse_y,\n null\n );\n let rect_y, rect_height;\n if (\n label_above_mouse === this.dragged_label_track_id ||\n label_below_mouse === this.dragged_label_track_id\n ) {\n return;\n }\n if (label_above_mouse !== null && label_below_mouse !== null) {\n rect_y =\n this.cell_tops_this_space[label_above_mouse] +\n this.cell_heights_this_space[label_above_mouse];\n rect_height =\n this.cell_tops_this_space[label_below_mouse] - rect_y;\n } else if (label_above_mouse === null) {\n rect_y =\n this.cell_tops_this_space[group[0]] -\n this.ctx.measureText('m').width;\n rect_height = this.ctx.measureText('m').width;\n } else if (label_below_mouse === null) {\n rect_y =\n this.cell_tops_this_space[label_above_mouse] +\n this.cell_heights_this_space[label_above_mouse];\n rect_height = this.ctx.measureText('m').width;\n }\n\n const min_rect_height = 4;\n rect_height = Math.max(rect_height, min_rect_height);\n this.ctx.fillRect(\n this.label_left_padding[tracks[tracks.length - 1]] *\n this.supersampling_ratio,\n rect_y,\n this.getWidth() * this.supersampling_ratio,\n rect_height\n );\n }\n }\n\n private isMouseOnLabel(mouse_y: number) {\n const candidate_track = this.getLabelAboveMouseSpace(\n this.tracks,\n mouse_y,\n null\n );\n if (candidate_track === null) {\n return null;\n }\n if (\n mouse_y <=\n this.cell_tops[candidate_track] -\n this.scroll_y +\n this.cell_heights[candidate_track]\n ) {\n return candidate_track;\n } else {\n return null;\n }\n }\n private getLabelAboveMouseSpace(\n track_ids: TrackId[],\n y: number,\n track_to_exclude: TrackId | null\n ) {\n if (y < this.cell_tops[track_ids[0]] - this.scroll_y) {\n return null;\n } else {\n let candidate_track = null;\n for (let i = 0; i < track_ids.length; i++) {\n if (\n track_to_exclude !== null &&\n track_to_exclude === track_ids[i]\n ) {\n continue;\n }\n if (this.cell_tops[track_ids[i]] - this.scroll_y > y) {\n break;\n } else {\n candidate_track = track_ids[i];\n }\n }\n return candidate_track;\n }\n }\n private getLabelBelowMouseSpace(\n track_ids: TrackId[],\n y: number,\n track_to_exclude: TrackId | null\n ) {\n if (\n y >\n this.cell_tops[track_ids[track_ids.length - 1]] - this.scroll_y\n ) {\n return null;\n } else {\n let candidate_track = null;\n for (let i = track_ids.length - 1; i >= 0; i--) {\n if (\n track_to_exclude !== null &&\n track_to_exclude === track_ids[i]\n ) {\n continue;\n }\n if (this.cell_tops[track_ids[i]] - this.scroll_y < y) {\n break;\n } else {\n candidate_track = track_ids[i];\n }\n }\n return candidate_track;\n }\n }\n\n private startDragging(\n model: OncoprintModel,\n track_id: TrackId,\n mouse_y: number\n ) {\n this.dragged_label_track_id = track_id;\n this.drag_mouse_y = mouse_y;\n this.renderAllLabels(model);\n }\n private stopDragging(\n model: OncoprintModel,\n new_previous_track_id: TrackId\n ) {\n this.drag_callback(this.dragged_label_track_id, new_previous_track_id);\n this.dragged_label_track_id = null;\n this.renderAllLabels(model);\n }\n\n private getMaximumLabelLength() {\n return 18;\n }\n\n public getWidth() {\n if (this.model.getShowTrackLabels()) {\n return Math.max(\n this.maximum_label_width / this.supersampling_ratio + 10,\n 70\n );\n } else {\n return 0;\n }\n }\n public getFontSize(no_supersampling_adjustment?: boolean) {\n return (\n (no_supersampling_adjustment ? 1 : this.supersampling_ratio) *\n Math.max(\n Math.min(this.base_font_size, this.minimum_track_height),\n 7\n )\n );\n }\n public setDragCallback(callback: OncoprintLabelView['drag_callback']) {\n this.drag_callback = callback;\n }\n public removeTrack(model: OncoprintModel, getCellViewHeight: () => number) {\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n public moveTrack(model: OncoprintModel, getCellViewHeight: () => number) {\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n public setTrackGroupOrder(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n public setShowTrackLabels(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n public addTracks(\n model: OncoprintModel,\n track_ids: TrackId[],\n getCellViewHeight: () => number\n ) {\n for (let i = 0; i < track_ids.length; i++) {\n this.labels[track_ids[i]] = model.getTrackLabel(track_ids[i]);\n this.sublabels[track_ids[i]] = model.getTrackSublabel(track_ids[i]);\n this.label_colors[track_ids[i]] = model.getTrackLabelColor(\n track_ids[i]\n );\n this.label_circle_colors[\n track_ids[i]\n ] = model.getTrackLabelCircleColor(track_ids[i]);\n this.label_left_padding[\n track_ids[i]\n ] = model.getTrackLabelLeftPadding(track_ids[i]);\n this.label_font_weight[\n track_ids[i]\n ] = model.getTrackLabelFontWeight(track_ids[i]);\n this.html_labels[track_ids[i]] = model.getOptionalHtmlTrackLabel(\n track_ids[i]\n );\n this.track_link_urls[track_ids[i]] = model.getTrackLinkUrl(\n track_ids[i]\n );\n }\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n\n public setShowTrackSublabels(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n\n public setScroll(model: OncoprintModel, getCellViewHeight: () => number) {\n this.setVertScroll(model, getCellViewHeight);\n }\n\n public setHorzScroll(model: OncoprintModel) {}\n\n public setViewport(model: OncoprintModel, getCellViewHeight: () => number) {\n this.setVertScroll(model, getCellViewHeight);\n }\n\n public setVertScroll(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n\n public setVertZoom(model: OncoprintModel, getCellViewHeight: () => number) {\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n\n public setZoom(model: OncoprintModel, getCellViewHeight: () => number) {\n this.setVertZoom(model, getCellViewHeight);\n }\n\n public highlightTrackLabelOnly(track_id: TrackId, model: OncoprintModel) {\n // track_id is a track id, or null to clear highlight\n this.highlighted_track_label_only = track_id;\n this.renderAllLabels(model);\n }\n\n public setHighlightedTracks(model: OncoprintModel) {\n this.renderAllLabels(model);\n }\n\n public setTrackMovable(model: OncoprintModel) {\n this.renderAllLabels(model);\n }\n\n public setTrackGroupHeader(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n\n public sort(model: OncoprintModel, getCellViewHeight: () => number) {\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n\n public suppressRendering() {\n this.rendering_suppressed = true;\n }\n\n public releaseRendering(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.rendering_suppressed = false;\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n\n public toSVGGroup(\n model: OncoprintModel,\n full_labels: boolean,\n offset_x: number,\n offset_y: number\n ) {\n const root = svgfactory.group(offset_x || 0, offset_y || 0);\n if (!model.getShowTrackLabels()) {\n // dont add anything if hiding track labels\n return root;\n }\n\n const cell_tops = model.getCellTops() as TrackProp<number>;\n const tracks = model.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track_id = tracks[i];\n const y = cell_tops[track_id] + model.getCellHeight(track_id) / 2;\n const label = model.getTrackLabel(track_id);\n const circleColor = model.getTrackLabelCircleColor(track_id);\n if (circleColor) {\n // add circle\n root.appendChild(\n makeSvgElement('ellipse', {\n cx: CIRCLE_X.toString(),\n cy: y.toString(),\n rx: this.circleRadius().toString(),\n ry: this.circleRadius().toString(),\n stroke: 'rgba(0,0,0,0)',\n fill: circleColor,\n })\n );\n }\n const text_elt = svgfactory.text(\n full_labels ? label : this.shortenLabelIfNecessary(label),\n model.getTrackLabelLeftPadding(track_id),\n y,\n this.getFontSize(true),\n 'Arial',\n model.getTrackLabelFontWeight(track_id) || 'bold',\n 'bottom',\n circleColor ? 'white' : 'black'\n );\n text_elt.setAttribute('dy', '0.35em');\n root.appendChild(text_elt);\n }\n return root;\n }\n}\n","// Colours for the oncoprint heatmap feature\n// viridis comes from matplotlib's default colour set, created by Stéfan van der Walt and Nathaniel Smith\n\nimport { RGBAColor } from './oncoprintruleset';\n\nexport default {\n viridis: [\n [68.08602, 1.24287, 84.000825, 1.0],\n [68.47005, 2.449275, 85.533885, 1.0],\n [68.83572, 3.729375, 87.051645, 1.0],\n [69.182775, 5.08521, 88.553595, 1.0],\n [69.51147, 6.518565, 90.038715, 1.0],\n [69.821295, 8.031735, 91.507515, 1.0],\n [70.11276, 9.62676, 92.958465, 1.0],\n [70.38561, 11.262585, 94.39182, 1.0],\n [70.63959, 12.83772, 95.807325, 1.0],\n [70.874955, 14.36262, 97.203705, 1.0],\n [71.091705, 15.846975, 98.58096, 1.0],\n [71.28933, 17.29818, 99.938835, 1.0],\n [71.468085, 18.721335, 101.276565, 1.0],\n [71.62797, 20.121285, 102.593895, 1.0],\n [71.76873, 21.5016, 103.89057, 1.0],\n [71.89062, 22.86483, 105.165825, 1.0],\n [71.993385, 24.213525, 106.419405, 1.0],\n [72.07728, 25.54998, 107.6508, 1.0],\n [72.14205, 26.875215, 108.86001, 1.0],\n [72.188205, 28.191015, 110.04627, 1.0],\n [72.215235, 29.4984, 111.209325, 1.0],\n [72.223395, 30.798135, 112.34892, 1.0],\n [72.212685, 32.09124, 113.4648, 1.0],\n [72.18336, 33.378225, 114.556455, 1.0],\n [72.13542, 34.6596, 115.623885, 1.0],\n [72.068865, 35.93613, 116.666835, 1.0],\n [71.98395, 37.20756, 117.68505, 1.0],\n [71.881185, 38.474655, 118.678275, 1.0],\n [71.76006, 39.73767, 119.646255, 1.0],\n [71.62134, 40.996605, 120.589245, 1.0],\n [71.465025, 42.251715, 121.50699, 1.0],\n [71.29137, 43.502745, 122.399235, 1.0],\n [71.10063, 44.74995, 123.266235, 1.0],\n [70.89306, 45.993585, 124.107735, 1.0],\n [70.66917, 47.23314, 124.92399, 1.0],\n [70.42947, 48.46887, 125.715255, 1.0],\n [70.173705, 49.700775, 126.481275, 1.0],\n [69.90264, 50.928855, 127.222305, 1.0],\n [69.61653, 52.1526, 127.938855, 1.0],\n [69.31614, 53.372265, 128.63067, 1.0],\n [69.001725, 54.587595, 129.29826, 1.0],\n [68.67354, 55.79859, 129.942135, 1.0],\n [68.33184, 57.004995, 130.56204, 1.0],\n [67.9779, 58.20681, 131.158995, 1.0],\n [67.611975, 59.40378, 131.732745, 1.0],\n [67.234065, 60.595905, 132.28431, 1.0],\n [66.84519, 61.78293, 132.813435, 1.0],\n [66.445605, 62.96511, 133.32114, 1.0],\n [66.036075, 64.141935, 133.80768, 1.0],\n [65.61711, 65.31315, 134.273565, 1.0],\n [65.189475, 66.479265, 134.71956, 1.0],\n [64.753425, 67.63977, 135.145665, 1.0],\n [64.30947, 68.794665, 135.552645, 1.0],\n [63.858375, 69.94395, 135.941265, 1.0],\n [63.400395, 71.087625, 136.31178, 1.0],\n [62.936805, 72.225435, 136.664955, 1.0],\n [62.46786, 73.357125, 137.0013, 1.0],\n [61.993815, 74.48346, 137.32158, 1.0],\n [61.515435, 75.603675, 137.625795, 1.0],\n [61.03323, 76.718025, 137.91522, 1.0],\n [60.547455, 77.82651, 138.189855, 1.0],\n [60.05913, 78.929385, 138.45072, 1.0],\n [59.568765, 80.02614, 138.69807, 1.0],\n [59.07687, 81.11703, 138.93267, 1.0],\n [58.583445, 82.202055, 139.15503, 1.0],\n [58.08951, 83.28147, 139.36566, 1.0],\n [57.595065, 84.355275, 139.56507, 1.0],\n [57.100875, 85.42347, 139.753515, 1.0],\n [56.607195, 86.486055, 139.93176, 1.0],\n [56.114535, 87.543285, 140.100315, 1.0],\n [55.62315, 88.59516, 140.25969, 1.0],\n [55.13355, 89.641425, 140.409885, 1.0],\n [54.64599, 90.682845, 140.55192, 1.0],\n [54.160725, 91.719165, 140.68605, 1.0],\n [53.678265, 92.750385, 140.81253, 1.0],\n [53.198865, 93.77676, 140.932125, 1.0],\n [52.72278, 94.79829, 141.044835, 1.0],\n [52.250265, 95.81523, 141.150915, 1.0],\n [51.781065, 96.82758, 141.250875, 1.0],\n [51.315945, 97.83585, 141.34497, 1.0],\n [50.85465, 98.839785, 141.43371, 1.0],\n [50.39718, 99.83964, 141.517095, 1.0],\n [49.9443, 100.835415, 141.59538, 1.0],\n [49.4955, 101.827365, 141.669075, 1.0],\n [49.051035, 102.815745, 141.73818, 1.0],\n [48.610905, 103.800555, 141.802695, 1.0],\n [48.175365, 104.78205, 141.86313, 1.0],\n [47.743905, 105.76023, 141.919485, 1.0],\n [47.31678, 106.73535, 141.972015, 1.0],\n [46.89399, 107.707665, 142.02072, 1.0],\n [46.47528, 108.67692, 142.0656, 1.0],\n [46.060395, 109.643625, 142.10691, 1.0],\n [45.649845, 110.60778, 142.14465, 1.0],\n [45.242865, 111.569385, 142.179075, 1.0],\n [44.839455, 112.52895, 142.209675, 1.0],\n [44.43987, 113.48622, 142.23696, 1.0],\n [44.043345, 114.441705, 142.260675, 1.0],\n [43.64988, 115.39515, 142.281075, 1.0],\n [43.25973, 116.34681, 142.29765, 1.0],\n [42.87213, 117.29694, 142.31091, 1.0],\n [42.487335, 118.24554, 142.320345, 1.0],\n [42.104835, 119.192865, 142.325955, 1.0],\n [41.724375, 120.138915, 142.32774, 1.0],\n [41.34621, 121.08369, 142.3257, 1.0],\n [40.969575, 122.0277, 142.319325, 1.0],\n [40.59447, 122.970435, 142.308615, 1.0],\n [40.220895, 123.91266, 142.293315, 1.0],\n [39.84885, 124.85412, 142.27368, 1.0],\n [39.477825, 125.794815, 142.2492, 1.0],\n [39.10782, 126.735, 142.21962, 1.0],\n [38.73909, 127.674675, 142.184685, 1.0],\n [38.37138, 128.614095, 142.14465, 1.0],\n [38.004945, 129.553005, 142.09875, 1.0],\n [37.639785, 130.491915, 142.047495, 1.0],\n [37.2759, 131.430315, 141.989865, 1.0],\n [36.913545, 132.368715, 141.92586, 1.0],\n [36.552465, 133.307115, 141.855225, 1.0],\n [36.193425, 134.245515, 141.777705, 1.0],\n [35.83668, 135.18366, 141.693045, 1.0],\n [35.482485, 136.12206, 141.60099, 1.0],\n [35.13135, 137.06046, 141.50103, 1.0],\n [34.78404, 137.999115, 141.393165, 1.0],\n [34.44183, 138.937515, 141.277395, 1.0],\n [34.104465, 139.876425, 141.152955, 1.0],\n [33.77322, 140.81508, 141.01959, 1.0],\n [33.44886, 141.754245, 140.877045, 1.0],\n [33.132915, 142.69341, 140.72532, 1.0],\n [32.825895, 143.632575, 140.563395, 1.0],\n [32.52984, 144.571995, 140.39178, 1.0],\n [32.245515, 145.511415, 140.209455, 1.0],\n [31.97547, 146.45109, 140.01693, 1.0],\n [31.720725, 147.39051, 139.813185, 1.0],\n [31.483065, 148.330185, 139.598475, 1.0],\n [31.26453, 149.269605, 139.372035, 1.0],\n [31.066905, 150.209025, 139.133865, 1.0],\n [30.89274, 151.148445, 138.883455, 1.0],\n [30.744075, 152.08761, 138.620805, 1.0],\n [30.62346, 153.02652, 138.34515, 1.0],\n [30.53319, 153.965175, 138.057, 1.0],\n [30.47556, 154.90332, 137.75559, 1.0],\n [30.452865, 155.840955, 137.44041, 1.0],\n [30.468165, 156.778335, 137.11146, 1.0],\n [30.523245, 157.71495, 136.768485, 1.0],\n [30.620655, 158.651055, 136.41123, 1.0],\n [30.76269, 159.58614, 136.03944, 1.0],\n [30.9519, 160.52046, 135.653115, 1.0],\n [31.18956, 161.454015, 135.25149, 1.0],\n [31.47822, 162.386295, 134.834565, 1.0],\n [31.8189, 163.317555, 134.40234, 1.0],\n [32.21313, 164.247285, 133.954305, 1.0],\n [32.662185, 165.175995, 133.490205, 1.0],\n [33.167085, 166.10292, 133.01004, 1.0],\n [33.72834, 167.02857, 132.513555, 1.0],\n [34.34646, 167.95218, 132.000495, 1.0],\n [35.021445, 168.87426, 131.470605, 1.0],\n [35.75355, 169.794045, 130.923885, 1.0],\n [36.542265, 170.712045, 130.359825, 1.0],\n [37.38708, 171.62775, 129.77868, 1.0],\n [38.28774, 172.540905, 129.180195, 1.0],\n [39.24297, 173.451765, 128.56386, 1.0],\n [40.252005, 174.360075, 127.92993, 1.0],\n [41.31408, 175.26558, 127.277895, 1.0],\n [42.427665, 176.16828, 126.60801, 1.0],\n [43.59174, 177.06792, 125.919765, 1.0],\n [44.805285, 177.9645, 125.213415, 1.0],\n [46.066515, 178.85751, 124.488195, 1.0],\n [47.374665, 179.747205, 123.744615, 1.0],\n [48.72795, 180.63333, 122.98242, 1.0],\n [50.125605, 181.515885, 122.201355, 1.0],\n [51.565845, 182.39436, 121.40142, 1.0],\n [53.04765, 183.268755, 120.582615, 1.0],\n [54.57, 184.13907, 119.74494, 1.0],\n [56.13162, 185.004795, 118.88763, 1.0],\n [57.731235, 185.86644, 118.011195, 1.0],\n [59.367825, 186.722985, 117.115635, 1.0],\n [61.04037, 187.57494, 116.20044, 1.0],\n [62.74785, 188.42205, 115.26612, 1.0],\n [64.489245, 189.263805, 114.31242, 1.0],\n [66.263535, 190.10046, 113.339085, 1.0],\n [68.069955, 190.931505, 112.346115, 1.0],\n [69.907995, 191.75694, 111.333255, 1.0],\n [71.776635, 192.576765, 110.30076, 1.0],\n [73.674855, 193.39047, 109.24863, 1.0],\n [75.602145, 194.198055, 108.176865, 1.0],\n [77.55774, 194.99952, 107.085465, 1.0],\n [79.540875, 195.79461, 105.97443, 1.0],\n [81.551295, 196.58307, 104.84376, 1.0],\n [83.58798, 197.3649, 103.6932, 1.0],\n [85.650675, 198.13959, 102.522495, 1.0],\n [87.73887, 198.907395, 101.332155, 1.0],\n [89.8518, 199.667805, 100.12218, 1.0],\n [91.988955, 200.42082, 98.89257, 1.0],\n [94.14957, 201.16644, 97.64307, 1.0],\n [96.333645, 201.904155, 96.374445, 1.0],\n [98.540415, 202.63422, 95.08593, 1.0],\n [100.76937, 203.356125, 93.778035, 1.0],\n [103.020255, 204.070125, 92.45076, 1.0],\n [105.292815, 204.775455, 91.103595, 1.0],\n [107.58654, 205.47237, 89.73705, 1.0],\n [109.900665, 206.160615, 88.35138, 1.0],\n [112.234935, 206.84019, 86.946585, 1.0],\n [114.58884, 207.51084, 85.52292, 1.0],\n [116.96187, 208.172565, 84.080385, 1.0],\n [119.353515, 208.824855, 82.61949, 1.0],\n [121.76352, 209.46822, 81.139725, 1.0],\n [124.19163, 210.101895, 79.641855, 1.0],\n [126.636825, 210.72588, 78.126135, 1.0],\n [129.099105, 211.34043, 76.59231, 1.0],\n [131.57796, 211.94529, 75.041145, 1.0],\n [134.07288, 212.540205, 73.472385, 1.0],\n [136.583355, 213.125175, 71.88654, 1.0],\n [139.10862, 213.699945, 70.28463, 1.0],\n [141.64842, 214.26477, 68.666655, 1.0],\n [144.20199, 214.81965, 67.033635, 1.0],\n [146.768565, 215.36433, 65.385825, 1.0],\n [149.34789, 215.898555, 63.723735, 1.0],\n [151.938945, 216.422835, 62.048895, 1.0],\n [154.541475, 216.936915, 60.36156, 1.0],\n [157.154715, 217.440795, 58.66326, 1.0],\n [159.777645, 217.934475, 56.955015, 1.0],\n [162.41001, 218.41821, 55.2381, 1.0],\n [165.050535, 218.892, 53.514555, 1.0],\n [167.69871, 219.355845, 51.78591, 1.0],\n [170.35377, 219.809745, 50.054715, 1.0],\n [173.014695, 220.25421, 48.323265, 1.0],\n [175.68072, 220.68924, 46.594875, 1.0],\n [178.350825, 221.114835, 44.872605, 1.0],\n [181.02399, 221.531505, 43.160535, 1.0],\n [183.699705, 221.93925, 41.463765, 1.0],\n [186.376695, 222.33858, 39.787395, 1.0],\n [189.05394, 222.729495, 38.138055, 1.0],\n [191.73042, 223.112505, 36.52314, 1.0],\n [194.405115, 223.48812, 34.95132, 1.0],\n [197.07726, 223.85634, 33.432795, 1.0],\n [199.745325, 224.217675, 31.978275, 1.0],\n [202.4088, 224.57289, 30.601275, 1.0],\n [205.06641, 224.92173, 29.316075, 1.0],\n [207.71688, 225.265215, 28.138485, 1.0],\n [210.3597, 225.6036, 27.085335, 1.0],\n [212.99385, 225.937395, 26.17473, 1.0],\n [215.618055, 226.26711, 25.42401, 1.0],\n [218.23155, 226.593255, 24.85026, 1.0],\n [220.833315, 226.91634, 24.468015, 1.0],\n [223.42284, 227.236875, 24.28875, 1.0],\n [225.999105, 227.55537, 24.32037, 1.0],\n [228.5616, 227.87208, 24.565425, 1.0],\n [231.109305, 228.188025, 25.021875, 1.0],\n [233.64171, 228.503205, 25.682835, 1.0],\n [236.15703, 228.81915, 26.538105, 1.0],\n [238.65552, 229.13535, 27.573405, 1.0],\n [241.13718, 229.452825, 28.77369, 1.0],\n [243.6015, 229.771575, 30.12264, 1.0],\n [246.04797, 230.092365, 31.604955, 1.0],\n [248.476335, 230.41545, 33.204825, 1.0],\n [250.88634, 230.741085, 34.908735, 1.0],\n [253.27824, 231.070035, 36.70368, 1.0],\n ],\n inferno: [\n [0.37281, 0.11883, 3.53583, 1.0],\n [0.578085, 0.32385, 4.73535, 1.0],\n [0.841245, 0.573495, 6.180945, 1.0],\n [1.159485, 0.86496, 7.881795, 1.0],\n [1.53153, 1.19646, 9.83229, 1.0],\n [1.95738, 1.56468, 11.94318, 1.0],\n [2.438055, 1.966815, 14.061465, 1.0],\n [2.974065, 2.401335, 16.1823, 1.0],\n [3.568725, 2.862375, 18.32481, 1.0],\n [4.223055, 3.34968, 20.47191, 1.0],\n [4.940115, 3.858915, 22.635585, 1.0],\n [5.723985, 4.385745, 24.818385, 1.0],\n [6.577215, 4.929405, 27.01215, 1.0],\n [7.50516, 5.483265, 29.228355, 1.0],\n [8.513175, 6.04401, 31.466235, 1.0],\n [9.60534, 6.609855, 33.71916, 1.0],\n [10.774515, 7.175445, 35.990955, 1.0],\n [11.963325, 7.73262, 38.29182, 1.0],\n [13.16922, 8.28087, 40.60977, 1.0],\n [14.394495, 8.815095, 42.94557, 1.0],\n [15.6417, 9.33045, 45.29871, 1.0],\n [16.914405, 9.81852, 47.67531, 1.0],\n [18.214395, 10.27497, 50.07027, 1.0],\n [19.542435, 10.685775, 52.478745, 1.0],\n [20.90031, 11.04864, 54.898695, 1.0],\n [22.289805, 11.36178, 57.327315, 1.0],\n [23.71245, 11.623665, 59.76129, 1.0],\n [25.16901, 11.83251, 62.19552, 1.0],\n [26.660505, 11.98704, 64.62465, 1.0],\n [28.18668, 12.086745, 67.04256, 1.0],\n [29.74728, 12.13137, 69.441855, 1.0],\n [31.34154, 12.12168, 71.81412, 1.0],\n [32.967675, 12.059715, 74.15094, 1.0],\n [34.62339, 11.94828, 76.44288, 1.0],\n [36.30639, 11.79171, 78.681015, 1.0],\n [38.013615, 11.59434, 80.856675, 1.0],\n [39.74175, 11.362545, 82.96119, 1.0],\n [41.485695, 11.10627, 84.985635, 1.0],\n [43.241625, 10.834695, 86.92287, 1.0],\n [45.005715, 10.55751, 88.768305, 1.0],\n [46.774395, 10.283895, 90.517605, 1.0],\n [48.543585, 10.023795, 92.168985, 1.0],\n [50.310735, 9.792, 93.721425, 1.0],\n [52.073295, 9.59616, 95.17569, 1.0],\n [53.829225, 9.44265, 96.533565, 1.0],\n [55.576995, 9.336825, 97.79811, 1.0],\n [57.314565, 9.283275, 98.972895, 1.0],\n [59.04219, 9.283275, 100.062, 1.0],\n [60.759615, 9.338355, 101.070015, 1.0],\n [62.466585, 9.449025, 102.001785, 1.0],\n [64.1631, 9.614775, 102.86139, 1.0],\n [65.84967, 9.835605, 103.653675, 1.0],\n [67.52655, 10.109985, 104.382975, 1.0],\n [69.193485, 10.43511, 105.05388, 1.0],\n [70.85175, 10.800015, 105.66996, 1.0],\n [72.501855, 11.202915, 106.23504, 1.0],\n [74.144565, 11.63922, 106.752435, 1.0],\n [75.78039, 12.10485, 107.225205, 1.0],\n [77.40984, 12.59598, 107.65641, 1.0],\n [79.033425, 13.108785, 108.048855, 1.0],\n [80.65191, 13.63995, 108.40458, 1.0],\n [82.26555, 14.18667, 108.726135, 1.0],\n [83.874855, 14.745885, 109.015305, 1.0],\n [85.480335, 15.3153, 109.27362, 1.0],\n [87.0825, 15.892875, 109.503375, 1.0],\n [88.681605, 16.47708, 109.705335, 1.0],\n [90.27816, 17.065875, 109.88103, 1.0],\n [91.87242, 17.657985, 110.031735, 1.0],\n [93.464895, 18.252645, 110.15847, 1.0],\n [95.05584, 18.848325, 110.262, 1.0],\n [96.645255, 19.444515, 110.343345, 1.0],\n [98.23314, 20.040705, 110.403525, 1.0],\n [99.820515, 20.636385, 110.442795, 1.0],\n [101.40687, 21.230535, 110.461665, 1.0],\n [102.99297, 21.8229, 110.460645, 1.0],\n [104.578815, 22.41348, 110.43999, 1.0],\n [106.164405, 23.001765, 110.400465, 1.0],\n [107.749995, 23.587755, 110.34207, 1.0],\n [109.33584, 24.17145, 110.26506, 1.0],\n [110.921685, 24.752595, 110.169945, 1.0],\n [112.507785, 25.33119, 110.05647, 1.0],\n [114.09414, 25.907235, 109.9254, 1.0],\n [115.681005, 26.48124, 109.77699, 1.0],\n [117.268125, 27.052695, 109.61073, 1.0],\n [118.8555, 27.62211, 109.426875, 1.0],\n [120.44364, 28.189485, 109.22517, 1.0],\n [122.03229, 28.75482, 109.006125, 1.0],\n [123.621195, 29.31837, 108.76974, 1.0],\n [125.21061, 29.880645, 108.51576, 1.0],\n [126.800535, 30.441645, 108.24444, 1.0],\n [128.390715, 31.001625, 107.95578, 1.0],\n [129.98115, 31.561095, 107.64978, 1.0],\n [131.571585, 32.1198, 107.326185, 1.0],\n [133.16253, 32.67825, 106.984995, 1.0],\n [134.75322, 33.236955, 106.62621, 1.0],\n [136.344165, 33.79617, 106.250085, 1.0],\n [137.9346, 34.355895, 105.856365, 1.0],\n [139.525035, 34.916895, 105.445305, 1.0],\n [141.11496, 35.47917, 105.016395, 1.0],\n [142.70412, 36.04323, 104.56989, 1.0],\n [144.29277, 36.609585, 104.10579, 1.0],\n [145.880655, 37.178235, 103.624095, 1.0],\n [147.46752, 37.749945, 103.124805, 1.0],\n [149.052855, 38.32497, 102.608175, 1.0],\n [150.63717, 38.903565, 102.07395, 1.0],\n [152.2197, 39.48624, 101.521875, 1.0],\n [153.800445, 40.073505, 100.952205, 1.0],\n [155.37915, 40.66587, 100.365195, 1.0],\n [156.955815, 41.263335, 99.760845, 1.0],\n [158.529675, 41.86692, 99.139155, 1.0],\n [160.100985, 42.476625, 98.50038, 1.0],\n [161.66949, 43.09296, 97.84452, 1.0],\n [163.234425, 43.71669, 97.171575, 1.0],\n [164.7963, 44.34807, 96.481545, 1.0],\n [166.354095, 44.987355, 95.77443, 1.0],\n [167.908065, 45.63531, 95.05074, 1.0],\n [169.4577, 46.292445, 94.31073, 1.0],\n [171.002745, 46.959015, 93.554145, 1.0],\n [172.54269, 47.635785, 92.781495, 1.0],\n [174.07728, 48.322755, 91.993035, 1.0],\n [175.606515, 49.020945, 91.188765, 1.0],\n [177.129885, 49.730355, 90.36894, 1.0],\n [178.64688, 50.452005, 89.533815, 1.0],\n [180.1575, 51.18564, 88.683135, 1.0],\n [181.66098, 51.93228, 87.817665, 1.0],\n [183.15732, 52.69218, 86.937405, 1.0],\n [184.646265, 53.46585, 86.04312, 1.0],\n [186.126795, 54.253545, 85.134555, 1.0],\n [187.599165, 55.05603, 84.212475, 1.0],\n [189.062865, 55.87356, 83.27688, 1.0],\n [190.517385, 56.70639, 82.32828, 1.0],\n [191.96247, 57.55503, 81.366675, 1.0],\n [193.39761, 58.419735, 80.39283, 1.0],\n [194.82255, 59.30127, 79.406745, 1.0],\n [196.23678, 60.199635, 78.408675, 1.0],\n [197.640045, 61.115085, 77.39913, 1.0],\n [199.031835, 62.048385, 76.378365, 1.0],\n [200.411895, 62.99928, 75.346635, 1.0],\n [201.779715, 63.96828, 74.30445, 1.0],\n [203.134785, 64.95564, 73.25232, 1.0],\n [204.477105, 65.96187, 72.190245, 1.0],\n [205.80591, 66.98646, 71.11899, 1.0],\n [207.120945, 68.03043, 70.038555, 1.0],\n [208.421955, 69.09327, 68.94945, 1.0],\n [209.70843, 70.175235, 67.851675, 1.0],\n [210.97986, 71.276835, 66.74625, 1.0],\n [212.236245, 72.397815, 65.632665, 1.0],\n [213.477075, 73.538175, 64.51194, 1.0],\n [214.702095, 74.697915, 63.38382, 1.0],\n [215.910795, 75.877545, 62.248815, 1.0],\n [217.10292, 77.0763, 61.10718, 1.0],\n [218.27796, 78.29469, 59.958915, 1.0],\n [219.435915, 79.53246, 58.80453, 1.0],\n [220.57653, 80.78961, 57.644025, 1.0],\n [221.699295, 82.065885, 56.47791, 1.0],\n [222.803955, 83.36103, 55.30593, 1.0],\n [223.890255, 84.6753, 54.12834, 1.0],\n [224.95794, 86.008185, 52.94514, 1.0],\n [226.00701, 87.35943, 51.75684, 1.0],\n [227.036955, 88.729035, 50.56293, 1.0],\n [228.047775, 90.116745, 49.36392, 1.0],\n [229.03896, 91.522305, 48.1593, 1.0],\n [230.010765, 92.94546, 46.94958, 1.0],\n [230.962425, 94.3857, 45.73425, 1.0],\n [231.89445, 95.84328, 44.513565, 1.0],\n [232.80633, 97.31718, 43.287525, 1.0],\n [233.69781, 98.807655, 42.05562, 1.0],\n [234.569145, 100.314195, 40.81785, 1.0],\n [235.419825, 101.836545, 39.574215, 1.0],\n [236.24985, 103.374195, 38.32446, 1.0],\n [237.05922, 104.927145, 37.068585, 1.0],\n [237.847935, 106.494885, 35.806335, 1.0],\n [238.615485, 108.076905, 34.5372, 1.0],\n [239.362125, 109.673205, 33.26169, 1.0],\n [240.087855, 111.283275, 31.979295, 1.0],\n [240.792675, 112.90686, 30.69027, 1.0],\n [241.476075, 114.543705, 29.39436, 1.0],\n [242.13831, 116.1933, 28.09182, 1.0],\n [242.779125, 117.85539, 26.782905, 1.0],\n [243.39903, 119.52972, 25.46787, 1.0],\n [243.99726, 121.21578, 24.147225, 1.0],\n [244.57407, 122.91357, 22.822245, 1.0],\n [245.129715, 124.62258, 21.493695, 1.0],\n [245.663685, 126.34281, 20.163615, 1.0],\n [246.176235, 128.073495, 18.834045, 1.0],\n [246.66711, 129.81489, 17.508045, 1.0],\n [247.136565, 131.56623, 16.18944, 1.0],\n [247.584345, 133.327515, 14.883585, 1.0],\n [248.01045, 135.09849, 13.59762, 1.0],\n [248.41488, 136.8789, 12.33996, 1.0],\n [248.797635, 138.66849, 11.12259, 1.0],\n [249.15846, 140.46675, 9.95775, 1.0],\n [249.49761, 142.273935, 8.907405, 1.0],\n [249.81483, 144.089535, 8.009295, 1.0],\n [250.11012, 145.913295, 7.26954, 1.0],\n [250.383225, 147.74496, 6.69375, 1.0],\n [250.634655, 149.58453, 6.288555, 1.0],\n [250.863645, 151.431495, 6.06135, 1.0],\n [251.070705, 153.28611, 6.01953, 1.0],\n [251.255325, 155.14761, 6.17151, 1.0],\n [251.41776, 157.01625, 6.52596, 1.0],\n [251.55801, 158.891775, 7.09257, 1.0],\n [251.67582, 160.773675, 7.88154, 1.0],\n [251.770935, 162.66195, 8.90358, 1.0],\n [251.84361, 164.5566, 10.17093, 1.0],\n [251.893845, 166.457115, 11.623155, 1.0],\n [251.92113, 168.36375, 13.19625, 1.0],\n [251.925975, 170.27574, 14.873895, 1.0],\n [251.90787, 172.193085, 16.640535, 1.0],\n [251.86707, 174.115785, 18.484695, 1.0],\n [251.80332, 176.04333, 20.39745, 1.0],\n [251.71662, 177.97572, 22.371405, 1.0],\n [251.60697, 179.9127, 24.40197, 1.0],\n [251.474625, 181.854015, 26.485065, 1.0],\n [251.31933, 183.79941, 28.618395, 1.0],\n [251.140575, 185.748885, 30.800175, 1.0],\n [250.939125, 187.702185, 33.029385, 1.0],\n [250.71498, 189.65829, 35.305515, 1.0],\n [250.46814, 191.61771, 37.629075, 1.0],\n [250.199115, 193.579425, 40.000065, 1.0],\n [249.90816, 195.543435, 42.420015, 1.0],\n [249.59553, 197.508975, 44.889435, 1.0],\n [249.261735, 199.47579, 47.410365, 1.0],\n [248.90754, 201.44337, 49.98459, 1.0],\n [248.53269, 203.41146, 52.61466, 1.0],\n [248.13744, 205.379295, 55.303635, 1.0],\n [247.72434, 207.34611, 58.05279, 1.0],\n [247.294665, 209.310375, 60.86493, 1.0],\n [246.850455, 211.271325, 63.74286, 1.0],\n [246.391965, 213.228705, 66.69117, 1.0],\n [245.92047, 215.18124, 69.714705, 1.0],\n [245.441835, 217.12638, 72.81423, 1.0],\n [244.95963, 219.062595, 75.99255, 1.0],\n [244.4736, 220.98912, 79.2591, 1.0],\n [243.99267, 222.902895, 82.61337, 1.0],\n [243.524235, 224.800095, 86.056125, 1.0],\n [243.069825, 226.68021, 89.599095, 1.0],\n [242.64423, 228.53763, 93.234885, 1.0],\n [242.25459, 230.369295, 96.969105, 1.0],\n [241.914165, 232.170615, 100.798695, 1.0],\n [241.63647, 233.936745, 104.719575, 1.0],\n [241.436295, 235.66284, 108.725115, 1.0],\n [241.32996, 237.344055, 112.803585, 1.0],\n [241.332765, 238.975545, 116.94096, 1.0],\n [241.460265, 240.55374, 121.11735, 1.0],\n [241.723935, 242.07609, 125.31363, 1.0],\n [242.133975, 243.541065, 129.5043, 1.0],\n [242.6937, 244.949685, 133.671765, 1.0],\n [243.404895, 246.30348, 137.792055, 1.0],\n [244.26348, 247.605765, 141.850125, 1.0],\n [245.26206, 248.86062, 145.840875, 1.0],\n [246.393495, 250.07289, 149.73753, 1.0],\n [247.64631, 251.24691, 153.54927, 1.0],\n [249.010305, 252.387015, 157.2738, 1.0],\n [250.475535, 253.497795, 160.909335, 1.0],\n [252.03231, 254.58282, 164.45562, 1.0],\n ],\n} as { [themeName: string]: RGBAColor[] };\n","/* Rule:\n *\n * condition: function from datum to boolean\n * shapes - a list of Shapes\n * legend_label\n * exclude_from_legend\n *\n * Shape:\n * type\n * x\n * y\n * ... shape-specific attrs ...\n *\n * Attrs by shape:\n *\n * rectangle: x, y, width, height, stroke, stroke-width, fill\n * triangle: x1, y1, x2, y2, x3, y3, stroke, stroke-width, fill\n * ellipse: x, y, width, height, stroke, stroke-width, fill\n * line: x1, y1, x2, y2, stroke, stroke-width\n */\n\nimport {\n ComputedShapeParams,\n Ellipse,\n Line,\n Rectangle,\n Shape,\n ShapeParams,\n Triangle,\n} from './oncoprintshape';\nimport heatmapColors from './heatmapcolors';\nimport binarysearch from './binarysearch';\nimport {\n Omit,\n cloneShallow,\n ifndef,\n objectValues,\n shallowExtend,\n z_comparator,\n} from './utils';\nimport { ActiveRules, ColumnProp, Datum, RuleSetId } from './oncoprintmodel';\nimport _ from 'lodash';\nimport extractrgba, { hexToRGBA, rgbaToHex } from './extractrgba';\n\nexport type RuleSetParams =\n | ILinearInterpRuleSetParams\n | ICategoricalRuleSetParams\n | IGradientRuleSetParams\n | IBarRuleSetParams\n | IStackedBarRuleSetParams\n | IGradientAndCategoricalRuleSetParams\n | IGeneticAlterationRuleSetParams;\n\ninterface IGeneralRuleSetParams {\n type?: RuleSetType;\n legend_label?: string;\n legend_base_color?: RGBAColor;\n exclude_from_legend?: boolean;\n na_z?: number; // z index of na shapes (defaults to 1)\n na_legend_label?: string; // legend label associated to NA (defaults to 'No data')\n na_shapes?: ShapeParams[]; // defaults to single strikethrough line\n}\n\ninterface ILinearInterpRuleSetParams extends IGeneralRuleSetParams {\n log_scale?: boolean;\n value_key: string;\n value_range: [number, number];\n}\n\n// all colors are hex, rgb, or rgba\nexport interface ICategoricalRuleSetParams extends IGeneralRuleSetParams {\n type: RuleSetType.CATEGORICAL;\n category_key: string; // key into data which gives category\n category_to_color?: { [category: string]: RGBAColor };\n universal_rule_categories?: { [category: string]: any };\n}\n\nexport interface IGradientRuleSetParams extends ILinearInterpRuleSetParams {\n type: RuleSetType.GRADIENT;\n // either `colormap_name` or `colors` needs to be present\n colors?: RGBAColor[]; // [r,g,b,a][]\n colormap_name?: string; // name of a colormap found in src/js/heatmapcolors.js\n value_stop_points: number[];\n null_color?: RGBAColor;\n null_legend_label?: string;\n}\n\n// TODO: it would be more elegant to create multiple inheritance (if possible) since\n// IGradientAndCategoricalRuleSetParams is a IGradientRuleSetParams and\n// ICategoricalRuleSetParams with a different `type` field.\nexport interface IGradientAndCategoricalRuleSetParams\n extends IGeneralRuleSetParams {\n type: RuleSetType.GRADIENT_AND_CATEGORICAL;\n // either `colormap_name` or `colors` needs to be present\n colors?: RGBAColor[];\n colormap_name?: string; // name of a colormap found in src/js/heatmapcolors.js\n value_stop_points: number[];\n null_color?: RGBAColor;\n\n log_scale?: boolean;\n value_key: string;\n value_range: [number, number];\n\n category_key: string; // key into data which gives category\n category_to_color?: { [category: string]: RGBAColor };\n}\n\nexport interface IBarRuleSetParams extends ILinearInterpRuleSetParams {\n type: RuleSetType.BAR;\n fill?: RGBAColor;\n negative_fill?: RGBAColor;\n}\n\nexport interface IStackedBarRuleSetParams extends IGeneralRuleSetParams {\n type: RuleSetType.STACKED_BAR;\n value_key: string;\n categories: string[];\n fills?: RGBAColor[];\n}\n\nexport interface IGeneticAlterationRuleSetParams extends IGeneralRuleSetParams {\n type: RuleSetType.GENE;\n rule_params: GeneticAlterationRuleParams;\n}\n\ntype GeneticAlterationSingleRuleParams = {\n shapes: ShapeParams[];\n legend_label: string;\n exclude_from_legend?: boolean;\n legend_order?: number;\n};\n\nexport type GeneticAlterationRuleParams = {\n always?: GeneticAlterationSingleRuleParams;\n conditional: {\n [datumKey: string]: {\n [commaSeparatedDatumValues: string]: GeneticAlterationSingleRuleParams;\n };\n };\n};\n\nexport type RGBAColor = [number, number, number, number]; //[0,255] x [0,255] x [0,255] x [0,1]\n\ntype RuleParams = {\n shapes: ShapeParams[];\n legend_label?: string;\n exclude_from_legend?: boolean;\n legend_config?: RuleLegendConfig;\n legend_order?: number;\n legend_base_color?: RGBAColor;\n};\n\ntype RuleLegendConfig =\n | { type: 'rule'; target: any }\n | {\n type: 'number';\n range: [number, number];\n range_type: LinearInterpRangeType;\n positive_color: RGBAColor;\n negative_color: RGBAColor;\n interpFn: (val: number) => number;\n } // range: [lower, upper]\n | {\n type: 'gradient';\n range: [number, number];\n colorFn: (val: number) => RGBAColor;\n };\n\nexport enum RuleSetType {\n CATEGORICAL = 'categorical',\n GRADIENT = 'gradient',\n GRADIENT_AND_CATEGORICAL = 'gradient+categorical',\n BAR = 'bar',\n STACKED_BAR = 'stacked_bar',\n GENE = 'gene',\n}\n\nexport type RuleId = number;\n\nexport type RuleWithId = {\n id: RuleId;\n rule: Rule;\n};\n\nfunction makeIdCounter() {\n let id = 0;\n return function() {\n id += 1;\n return id;\n };\n}\n\nfunction intRange(length: number) {\n const ret = [];\n for (let i = 0; i < length; i++) {\n ret.push(i);\n }\n return ret;\n}\n\nfunction makeUniqueColorGetter(init_used_colors: string[]) {\n init_used_colors = init_used_colors || [];\n const colors = [\n '#3366cc',\n '#dc3912',\n '#ff9900',\n '#109618',\n '#990099',\n '#0099c6',\n '#dd4477',\n '#66aa00',\n '#b82e2e',\n '#316395',\n '#994499',\n '#22aa99',\n '#aaaa11',\n '#6633cc',\n '#e67300',\n '#8b0707',\n '#651067',\n '#329262',\n '#5574a6',\n '#3b3eac',\n '#b77322',\n '#16d620',\n '#b91383',\n '#f4359e',\n '#9c5935',\n '#a9c413',\n '#2a778d',\n '#668d1c',\n '#bea413',\n '#0c5922',\n '#743411',\n ]; // Source: D3\n let index = 0;\n const used_colors: { [color: string]: boolean } = {};\n for (let i = 0; i < init_used_colors.length; i++) {\n used_colors[init_used_colors[i]] = true;\n }\n return function(color?: string) {\n if (color) {\n // calling with an argument adds it to the used colors record\n used_colors[color] = true;\n } else {\n // calling without an argument returns a new unused color\n let next_color = colors[index % colors.length];\n while (used_colors[next_color]) {\n const darker_next_color = darkenHexColor(next_color);\n if (darker_next_color === next_color) {\n break;\n }\n next_color = darker_next_color;\n }\n used_colors[next_color] = true;\n index += 1;\n\n return hexToRGBA(next_color);\n }\n\n return undefined;\n };\n}\n\nfunction makeNAShapes(z: number): ShapeParams[] {\n return [\n {\n type: 'rectangle',\n fill: [255, 255, 255, 1],\n z: z,\n },\n {\n type: 'line',\n stroke: [190, 190, 190, 1],\n 'stroke-width': 1,\n x1: 0,\n x2: 100,\n y1: 50,\n y2: 50,\n z: z,\n },\n ];\n}\nconst NA_STRING = 'na';\nconst NA_LABEL = 'No data';\n\nfunction colorToHex(color: string) {\n let r;\n let g;\n let b;\n const rgba_match = color.match(\n /^[\\s]*rgba\\([\\s]*([0-9]+)[\\s]*,[\\s]*([0-9]+)[\\s]*,[\\s]*([0-9]+)[\\s]*,[\\s]*([0-9.]+)[\\s]*\\)[\\s]*$/\n );\n if (rgba_match && rgba_match.length === 5) {\n r = parseInt(rgba_match[1]).toString(16);\n g = parseInt(rgba_match[2]).toString(16);\n b = parseInt(rgba_match[3]).toString(16);\n if (r.length === 1) {\n r = '0' + r;\n }\n if (g.length === 1) {\n g = '0' + g;\n }\n if (b.length === 1) {\n b = '0' + b;\n }\n return '#' + r + g + b;\n }\n\n const rgb_match = color.match(\n /^[\\s]*rgb\\([\\s]*([0-9]+)[\\s]*,[\\s]*([0-9]+)[\\s]*,[\\s]*([0-9]+)[\\s]*\\)[\\s]*$/\n );\n if (rgb_match && rgb_match.length === 4) {\n r = parseInt(rgb_match[1]).toString(16);\n g = parseInt(rgb_match[2]).toString(16);\n b = parseInt(rgb_match[3]).toString(16);\n if (r.length === 1) {\n r = '0' + r;\n }\n if (g.length === 1) {\n g = '0' + g;\n }\n if (b.length === 1) {\n b = '0' + b;\n }\n return '#' + r + g + b;\n }\n\n return color;\n}\n\nfunction darkenHexChannel(c: string) {\n let numC = parseInt(c, 16);\n numC *= 0.95;\n numC = Math.round(numC);\n c = numC.toString(16);\n if (c.length === 1) {\n c = '0' + c;\n }\n return c;\n}\n\nfunction darkenHexColor(color: string) {\n let r = color[1] + color[2];\n let g = color[3] + color[4];\n let b = color[5] + color[6];\n r = darkenHexChannel(r);\n g = darkenHexChannel(g);\n b = darkenHexChannel(b);\n return '#' + r + g + b;\n}\n\nexport class RuleSet {\n static getRuleSetId = makeIdCounter();\n static getRuleId = makeIdCounter();\n\n public rule_set_id: RuleSetId;\n public legend_label?: string;\n protected legend_base_color?: RGBAColor;\n public exclude_from_legend?: boolean;\n protected active_rule_ids: ActiveRules;\n protected rules_with_id: RuleWithId[];\n protected universal_rule?: RuleWithId;\n\n constructor(params: Omit<RuleSetParams, 'type'>) {\n /* params:\n * - legend_label\n * - exclude_from_legend\n */\n this.rule_set_id = RuleSet.getRuleSetId();\n this.legend_label = params.legend_label;\n this.legend_base_color = params.legend_base_color;\n this.exclude_from_legend = params.exclude_from_legend;\n this.active_rule_ids = {};\n this.rules_with_id = [];\n }\n\n public getLegendLabel() {\n return this.legend_label;\n }\n\n public getRuleSetId() {\n return this.rule_set_id;\n }\n\n public addRules(list_of_params: RuleParams[]) {\n const self = this;\n return list_of_params.map(function(params) {\n return self._addRule(params);\n });\n }\n\n public _addRule(params: RuleParams, rule_id?: RuleId) {\n if (typeof rule_id === 'undefined') {\n rule_id = RuleSet.getRuleId();\n }\n this.rules_with_id.push({ id: rule_id, rule: new Rule(params) });\n return rule_id;\n }\n\n public setUniversalRule(r: RuleWithId) {\n this.universal_rule = r;\n }\n\n public removeRule(rule_id: RuleId) {\n var index = -1;\n for (let i = 0; i < this.rules_with_id.length; i++) {\n if (this.rules_with_id[i].id === rule_id) {\n index = i;\n break;\n }\n }\n if (index > -1) {\n this.rules_with_id.splice(index, 1);\n }\n delete this.active_rule_ids[rule_id];\n }\n\n public getRuleWithId(rule_id: RuleId) {\n let ret = null;\n for (let i = 0; i < this.rules_with_id.length; i++) {\n if (this.rules_with_id[i].id === rule_id) {\n ret = this.rules_with_id[i];\n break;\n }\n }\n return ret;\n }\n\n public isExcludedFromLegend() {\n return this.exclude_from_legend;\n }\n\n public getRule(rule_id: RuleId): Rule {\n return this.getRuleWithId(rule_id).rule;\n }\n\n public getRecentlyUsedRules() {\n const self = this;\n return Object.keys(this.active_rule_ids).map(function(rule_id) {\n return self.getRule(parseInt(rule_id, 10));\n });\n }\n\n public applyRulesToDatum(\n rules_with_id: RuleWithId[],\n datum: Datum,\n cell_width: number,\n cell_height: number\n ) {\n let shapes: ComputedShapeParams[] = [];\n const rules_len = rules_with_id.length;\n for (let j = 0; j < rules_len; j++) {\n shapes = shapes.concat(\n rules_with_id[j].rule.apply(datum, cell_width, cell_height)\n );\n }\n return shapes;\n }\n\n public getSpecificRulesForDatum(datum?: Datum): RuleWithId[] {\n throw 'Not implemented on base class';\n }\n\n public getUniversalRule() {\n return this.universal_rule;\n }\n\n public getUniversalShapes(cell_width: number, cell_height: number) {\n if (this.getUniversalRule()) {\n const shapes = this.getUniversalRule().rule.apply(\n {}, // a universal rule does not rely on anything specific to the data\n cell_width,\n cell_height\n );\n shapes.sort(z_comparator);\n return shapes;\n } else {\n return [];\n }\n }\n\n public getSpecificShapesForDatum(\n data: Datum[],\n cell_width: number,\n cell_height: number,\n out_active_rules?: ActiveRules | undefined,\n data_id_key?: string & keyof Datum,\n important_ids?: ColumnProp<boolean>\n ) {\n // Returns a list of lists of concrete shapes, in the same order as data\n // optional parameter important_ids determines which ids count towards active rules (optional parameter data_id_key\n //\t\tis used for this too)\n const ret = [];\n for (var i = 0; i < data.length; i++) {\n const datum = data[i];\n const should_mark_active =\n !important_ids || !!important_ids[datum[data_id_key!]];\n const rules = this.getSpecificRulesForDatum(datum);\n if (typeof out_active_rules !== 'undefined' && should_mark_active) {\n for (let j = 0; j < rules.length; j++) {\n out_active_rules[rules[j].id] = true;\n }\n }\n const shapes = this.applyRulesToDatum(\n rules,\n data[i],\n cell_width,\n cell_height\n );\n shapes.sort(z_comparator);\n ret.push(shapes);\n }\n // mark universal rule as active\n if (\n this.getUniversalRule() &&\n typeof out_active_rules !== 'undefined'\n ) {\n out_active_rules[this.getUniversalRule().id] = true;\n }\n return ret;\n }\n}\n\nclass LookupRuleSet extends RuleSet {\n private lookup_map_by_key_and_value: {\n [key: string]: { [value: string]: RuleWithId };\n } = {};\n private lookup_map_by_key: { [key: string]: RuleWithId } = {};\n private rule_id_to_conditions: {\n [ruleId: number]: { key: string; value: string }[];\n } = {};\n\n public getSpecificRulesForDatum(datum?: Datum) {\n if (typeof datum === 'undefined') {\n return this.rules_with_id;\n }\n let ret: RuleWithId[] = [];\n for (var key in datum) {\n if (key in datum && typeof datum[key] !== 'undefined') {\n var key_rule = this.lookup_map_by_key[key];\n if (typeof key_rule !== 'undefined') {\n ret.push(key_rule);\n }\n var key_and_value_rule =\n (this.lookup_map_by_key_and_value[key] &&\n this.lookup_map_by_key_and_value[key][datum[key]]) ||\n undefined;\n if (typeof key_and_value_rule !== 'undefined') {\n ret.push(key_and_value_rule);\n }\n }\n }\n return ret;\n }\n\n private indexRuleForLookup(\n condition_key: string,\n condition_value: string,\n rule_with_id: RuleWithId\n ) {\n if (condition_key === null) {\n this.setUniversalRule(rule_with_id);\n } else {\n if (condition_value === null) {\n this.lookup_map_by_key[condition_key] = rule_with_id;\n } else {\n this.lookup_map_by_key_and_value[condition_key] =\n this.lookup_map_by_key_and_value[condition_key] || {};\n this.lookup_map_by_key_and_value[condition_key][\n condition_value\n ] = rule_with_id;\n }\n }\n this.rule_id_to_conditions[rule_with_id.id] =\n this.rule_id_to_conditions[rule_with_id.id] || [];\n this.rule_id_to_conditions[rule_with_id.id].push({\n key: condition_key,\n value: condition_value,\n });\n }\n\n public addRule(\n condition_key: string,\n condition_value: any,\n params: RuleParams\n ) {\n const rule_id = this._addRule(params);\n\n this.indexRuleForLookup(\n condition_key,\n condition_value,\n this.getRuleWithId(rule_id)\n );\n\n return rule_id;\n }\n\n public linkExistingRule(\n condition_key: string,\n condition_value: string,\n existing_rule_id: RuleId\n ) {\n this.indexRuleForLookup(\n condition_key,\n condition_value,\n this.getRuleWithId(existing_rule_id)\n );\n }\n\n public removeRule(rule_id: RuleId) {\n super.removeRule(rule_id);\n\n while (this.rule_id_to_conditions[rule_id].length > 0) {\n var condition = this.rule_id_to_conditions[rule_id].pop();\n if (condition.key === null) {\n // universal rule\n this.universal_rule = undefined;\n } else {\n if (condition.value === null) {\n delete this.lookup_map_by_key[condition.key];\n } else {\n delete this.lookup_map_by_key_and_value[condition.key][\n condition.value\n ];\n }\n }\n }\n delete this.rule_id_to_conditions[rule_id];\n }\n}\n\ntype ConditionRuleSetCondition = (d: Datum) => boolean;\nclass ConditionRuleSet extends RuleSet {\n private rule_id_to_condition: {\n [ruleId: number]: ConditionRuleSetCondition;\n } = {};\n\n constructor(params: RuleSetParams, omitNArule?: boolean) {\n super(params);\n\n if (!omitNArule) {\n this.addRule(\n function(d) {\n return d[NA_STRING] === true;\n },\n {\n shapes:\n params.na_shapes || makeNAShapes(params.na_z || 1000),\n legend_label: params.na_legend_label || NA_LABEL,\n exclude_from_legend: false,\n legend_config: { type: 'rule', target: { na: true } },\n legend_order: Number.POSITIVE_INFINITY,\n }\n );\n }\n }\n\n public getSpecificRulesForDatum(datum?: Datum) {\n if (typeof datum === 'undefined') {\n return this.rules_with_id;\n }\n const ret = [];\n for (let i = 0; i < this.rules_with_id.length; i++) {\n if (this.rule_id_to_condition[this.rules_with_id[i].id](datum)) {\n ret.push(this.rules_with_id[i]);\n }\n }\n return ret;\n }\n\n public addRule(\n condition: ConditionRuleSetCondition,\n params: RuleParams,\n rule_id?: RuleId\n ) {\n rule_id = this._addRule(params, rule_id);\n this.rule_id_to_condition[rule_id] = condition;\n return rule_id;\n }\n\n public removeRule(rule_id: RuleId) {\n super.removeRule(rule_id);\n delete this.rule_id_to_condition[rule_id];\n }\n}\n\nclass CategoricalRuleSet extends LookupRuleSet {\n public readonly category_key: string;\n private readonly category_to_color: { [category: string]: RGBAColor };\n private readonly getUnusedColor: (color?: string) => RGBAColor;\n private readonly universal_rule_categories?: { [category: string]: any };\n constructor(\n params: Omit<ICategoricalRuleSetParams, 'type'>,\n omitNArule?: boolean\n ) {\n super(params);\n if (!omitNArule) {\n this.addRule(NA_STRING, true, {\n shapes: params.na_shapes || makeNAShapes(params.na_z || 1000),\n legend_label: params.na_legend_label || NA_LABEL,\n exclude_from_legend: false,\n legend_config: { type: 'rule', target: { na: true } },\n legend_order: Number.POSITIVE_INFINITY,\n });\n }\n\n this.category_key = params.category_key;\n this.universal_rule_categories = params.universal_rule_categories;\n this.category_to_color = cloneShallow(\n ifndef(params.category_to_color, {})\n );\n this.getUnusedColor = makeUniqueColorGetter(\n objectValues(this.category_to_color).map(rgbaToHex)\n );\n for (const category of Object.keys(this.category_to_color)) {\n const color = this.category_to_color[category];\n this.addCategoryRule(category, color);\n this.getUnusedColor(rgbaToHex(color));\n }\n }\n\n private addCategoryRule(category: string, color: RGBAColor) {\n const legend_rule_target: any = {};\n legend_rule_target[this.category_key] = category;\n const rule_params: RuleParams = {\n shapes: [\n {\n type: 'rectangle',\n fill: color,\n },\n ],\n legend_label: category,\n exclude_from_legend: false,\n legend_config: { type: 'rule', target: legend_rule_target },\n };\n if (\n this.universal_rule_categories &&\n this.universal_rule_categories.hasOwnProperty(category)\n ) {\n // add universal rule\n this.addRule(null, category, rule_params);\n } else {\n this.addRule(this.category_key, category, rule_params);\n }\n }\n\n public getSpecificShapesForDatum(\n data: Datum,\n cell_width: number,\n cell_height: number,\n out_active_rules: ActiveRules | undefined,\n data_id_key: string & keyof Datum,\n important_ids?: ColumnProp<boolean>\n ) {\n // First ensure there is a color for all categories\n for (let i = 0, data_len = data.length; i < data_len; i++) {\n if (data[i][NA_STRING]) {\n continue;\n }\n const category = data[i][this.category_key];\n if (!(category in this.category_to_color)) {\n const color = this.getUnusedColor();\n\n this.category_to_color[category] = color;\n this.addCategoryRule(category, color);\n }\n }\n // Then propagate the call up\n return super.getSpecificShapesForDatum(\n data,\n cell_width,\n cell_height,\n out_active_rules,\n data_id_key,\n important_ids\n );\n }\n}\n\nexport enum LinearInterpRangeType {\n ALL = 'ALL', // all values positive, negative and zero\n NON_NEGATIVE = 'NON_NEGATIVE', // value range all positive values inclusive zero (0)\n NON_POSITIVE = 'NON_POSITIVE', // value range all negative values inclusive zero (0)\n}\n\nclass LinearInterpRuleSet extends ConditionRuleSet {\n protected value_key: string;\n protected value_range: [number, number];\n protected log_scale?: boolean;\n protected type: string;\n protected makeInterpFn: () => (valToConvert: number) => number;\n protected inferred_value_range: [number, number];\n\n constructor(params: ILinearInterpRuleSetParams) {\n super(params);\n this.value_key = params.value_key;\n this.value_range = params.value_range;\n this.log_scale = params.log_scale; // boolean\n this.type = params.type;\n\n this.makeInterpFn = function() {\n const range = this.getEffectiveValueRange();\n const rangeType = this.getValueRangeType();\n const plotType = this.type;\n if (this.log_scale) {\n var shift_to_make_pos = Math.abs(range[0]) + 1;\n var log_range =\n Math.log(range[1] + shift_to_make_pos) -\n Math.log(range[0] + shift_to_make_pos);\n var log_range_lower = Math.log(range[0] + shift_to_make_pos);\n return function(val: number) {\n return (\n (Math.log(val + shift_to_make_pos) - log_range_lower) /\n log_range\n );\n };\n } else {\n return function(val) {\n var range_spread = range[1] - range[0],\n range_lower = range[0],\n range_higher = range[1];\n if (plotType === 'bar') {\n if (rangeType === LinearInterpRangeType.NON_POSITIVE) {\n // when data only contains non positive values\n return (val - range_higher) / range_spread;\n } else if (\n rangeType === LinearInterpRangeType.NON_NEGATIVE\n ) {\n // when data only contains non negative values\n return (val - range_lower) / range_spread;\n } else if (rangeType === LinearInterpRangeType.ALL) {\n range_spread =\n Math.abs(range[0]) > range[1]\n ? Math.abs(range[0])\n : range[1];\n return val / range_spread;\n }\n } else {\n return (val - range_lower) / range_spread;\n }\n return undefined;\n };\n }\n };\n }\n\n protected getEffectiveValueRange(): [number, number] {\n const ret = (this.value_range && this.value_range.slice()) || [\n undefined,\n undefined,\n ];\n if (typeof ret[0] === 'undefined') {\n ret[0] = this.inferred_value_range[0];\n }\n if (typeof ret[1] === 'undefined') {\n ret[1] = this.inferred_value_range[1];\n }\n if (ret[0] === ret[1]) {\n // Make sure non-empty interval\n ret[0] -= ret[0] / 2;\n ret[1] += ret[1] / 2;\n }\n return ret as [number, number];\n }\n protected getValueRangeType() {\n var range = this.getEffectiveValueRange();\n if (range[0] < 0 && range[1] <= 0) {\n return LinearInterpRangeType.NON_POSITIVE;\n } else if (range[0] >= 0 && range[1] > 0) {\n return LinearInterpRangeType.NON_NEGATIVE;\n } else {\n return LinearInterpRangeType.ALL;\n }\n }\n\n public getSpecificShapesForDatum(\n data: Datum,\n cell_width: number,\n cell_height: number,\n out_active_rules: ActiveRules | undefined,\n data_id_key: string & keyof Datum,\n important_ids?: ColumnProp<boolean>\n ) {\n // First find value range\n let value_min = Number.POSITIVE_INFINITY;\n let value_max = Number.NEGATIVE_INFINITY;\n for (var i = 0, datalen = data.length; i < datalen; i++) {\n const d = data[i];\n if (isNaN(d[this.value_key])) {\n continue;\n }\n value_min = Math.min(value_min, d[this.value_key]);\n value_max = Math.max(value_max, d[this.value_key]);\n }\n if (value_min === Number.POSITIVE_INFINITY) {\n value_min = 0;\n }\n if (value_max === Number.NEGATIVE_INFINITY) {\n value_max = 0;\n }\n this.inferred_value_range = [value_min, value_max];\n this.updateLinearRules();\n\n // Then propagate the call up\n return super.getSpecificShapesForDatum(\n data,\n cell_width,\n cell_height,\n out_active_rules,\n data_id_key,\n important_ids\n );\n }\n\n protected updateLinearRules() {\n throw 'Not implemented in abstract class';\n }\n}\n\nclass GradientRuleSet extends LinearInterpRuleSet {\n private colors: RGBAColor[] = [];\n private value_stop_points: number[];\n private null_color?: RGBAColor;\n private gradient_rule: RuleId;\n\n constructor(params: Omit<IGradientRuleSetParams, 'type'>) {\n super(params);\n if (params.colors) {\n this.colors = params.colors || [];\n } else if (params.colormap_name) {\n this.colors = heatmapColors[params.colormap_name] || [];\n }\n if (this.colors.length === 0) {\n this.colors.push([0, 0, 0, 1], [255, 0, 0, 1]);\n }\n\n this.value_stop_points = params.value_stop_points;\n this.null_color = params.null_color || [211, 211, 211, 1];\n\n var self = this;\n var value_key = this.value_key;\n this.addRule(\n function(d) {\n return d[NA_STRING] !== true && d[value_key] === null;\n },\n {\n shapes: [\n {\n type: 'rectangle',\n fill: self.null_color,\n },\n ],\n legend_label: params.null_legend_label || 'Not a number',\n exclude_from_legend: false,\n legend_config: { type: 'rule', target: { [value_key]: null } },\n }\n );\n }\n\n static linInterpColors(\n t: number,\n begin_color: RGBAColor,\n end_color: RGBAColor\n ): RGBAColor {\n // 0 <= t <= 1\n return [\n Math.round(begin_color[0] * (1 - t) + end_color[0] * t),\n Math.round(begin_color[1] * (1 - t) + end_color[1] * t),\n Math.round(begin_color[2] * (1 - t) + end_color[2] * t),\n begin_color[3] * (1 - t) + end_color[3] * t,\n ];\n }\n\n private makeColorFn(\n colors: RGBAColor[],\n interpFn: (valToConvert: number) => number\n ) {\n const value_stop_points = this.value_stop_points;\n let stop_points: number[];\n if (value_stop_points) {\n stop_points = value_stop_points.map(interpFn);\n } else {\n stop_points = intRange(colors.length).map(function(x) {\n return x / (colors.length - 1);\n });\n }\n return function(t: number): RGBAColor {\n // 0 <= t <= 1\n var begin_interval_index = binarysearch(\n stop_points,\n t,\n function(x) {\n return x;\n },\n true\n );\n if (begin_interval_index === -1) {\n return [0, 0, 0, 1];\n }\n var end_interval_index = Math.min(\n colors.length - 1,\n begin_interval_index + 1\n );\n var spread =\n stop_points[end_interval_index] -\n stop_points[begin_interval_index];\n if (spread === 0) {\n return colors[end_interval_index];\n } else {\n var interval_t =\n (t - stop_points[begin_interval_index]) / spread;\n var begin_color = colors[begin_interval_index];\n var end_color = colors[end_interval_index];\n return GradientRuleSet.linInterpColors(\n interval_t,\n begin_color,\n end_color\n );\n }\n };\n }\n\n protected updateLinearRules() {\n let rule_id;\n if (typeof this.gradient_rule !== 'undefined') {\n rule_id = this.gradient_rule;\n this.removeRule(this.gradient_rule);\n }\n const interpFn = this.makeInterpFn();\n const colorFn = this.makeColorFn(this.colors, interpFn);\n const value_key = this.value_key;\n const null_color = this.null_color;\n\n this.gradient_rule = this.addRule(\n function(d) {\n return d[NA_STRING] !== true && d[value_key] !== null;\n },\n {\n shapes: [\n {\n type: 'rectangle',\n fill: function(d) {\n var t = interpFn(d[value_key]);\n return colorFn(t) as RGBAColor;\n },\n },\n ],\n exclude_from_legend: false,\n legend_config: {\n type: 'gradient' as 'gradient',\n range: this.getEffectiveValueRange(),\n colorFn: colorFn,\n },\n },\n rule_id\n );\n }\n}\n\nclass BarRuleSet extends LinearInterpRuleSet {\n private fill: RGBAColor;\n private negative_fill: RGBAColor;\n private bar_rule?: RuleId;\n\n constructor(params: IBarRuleSetParams) {\n super(params);\n this.fill = params.fill || [0, 128, 0, 1]; // green\n this.negative_fill = params.negative_fill || [255, 0, 0, 1]; //red\n }\n\n protected updateLinearRules() {\n let rule_id;\n if (typeof this.bar_rule !== 'undefined') {\n rule_id = this.bar_rule;\n this.removeRule(this.bar_rule);\n }\n const interpFn = this.makeInterpFn();\n const value_key = this.value_key;\n const positive_color = this.fill;\n const negative_color = this.negative_fill;\n const yPosFn = this.getYPosPercentagesFn();\n const cellHeightFn = this.getCellHeightPercentagesFn();\n this.bar_rule = this.addRule(\n function(d) {\n return d[NA_STRING] !== true;\n },\n {\n shapes: [\n {\n type: 'rectangle',\n y: function(d) {\n var t = interpFn(d[value_key]);\n return yPosFn(t);\n },\n height: function(d) {\n var t = interpFn(d[value_key]);\n return cellHeightFn(t);\n },\n fill: function(d) {\n return d[value_key] < 0\n ? negative_color\n : positive_color;\n },\n },\n ],\n exclude_from_legend: false,\n legend_config: {\n type: 'number' as 'number',\n range: this.getEffectiveValueRange(),\n range_type: this.getValueRangeType(),\n positive_color: positive_color,\n negative_color: negative_color,\n interpFn: interpFn,\n },\n },\n rule_id\n );\n }\n\n public getYPosPercentagesFn() {\n let ret;\n switch (this.getValueRangeType()) {\n case LinearInterpRangeType.NON_POSITIVE:\n ret = function(t: number) {\n return 0;\n };\n break;\n case LinearInterpRangeType.NON_NEGATIVE:\n ret = function(t: number) {\n return (1 - t) * 100;\n };\n break;\n case LinearInterpRangeType.ALL:\n ret = function(t: number) {\n return Math.min(1 - t, 1) * 50;\n };\n break;\n }\n return ret;\n }\n\n public getCellHeightPercentagesFn() {\n let ret;\n switch (this.getValueRangeType()) {\n case LinearInterpRangeType.NON_POSITIVE:\n ret = function(t: number) {\n return -t * 100;\n };\n break;\n case LinearInterpRangeType.NON_NEGATIVE:\n ret = function(t: number) {\n return t * 100;\n };\n break;\n case LinearInterpRangeType.ALL:\n ret = function(t: number) {\n return Math.abs(t) * 50;\n };\n break;\n }\n return ret;\n }\n}\n\nclass StackedBarRuleSet extends ConditionRuleSet {\n constructor(params: IStackedBarRuleSetParams) {\n super(params);\n const value_key = params.value_key;\n const fills = params.fills || [];\n const categories = params.categories || [];\n const getUnusedColor = makeUniqueColorGetter(fills.map(rgbaToHex));\n\n // Initialize with default values\n while (fills.length < categories.length) {\n fills.push(getUnusedColor());\n }\n\n const self = this;\n for (let i = 0; i < categories.length; i++) {\n (function(I) {\n const legend_target: any = {};\n legend_target[value_key] = {};\n for (let j = 0; j < categories.length; j++) {\n legend_target[value_key][categories[j]] = 0;\n }\n legend_target[value_key][categories[I]] = 1;\n self.addRule(\n function(d) {\n return d[NA_STRING] !== true;\n },\n {\n shapes: [\n {\n type: 'rectangle',\n fill: fills[I],\n width: 100,\n height: function(d) {\n var total = 0;\n for (\n var j = 0;\n j < categories.length;\n j++\n ) {\n total += parseFloat(\n d[value_key][categories[j]]\n );\n }\n return (\n (parseFloat(\n d[value_key][categories[I]]\n ) *\n 100) /\n total\n );\n },\n y: function(d) {\n var total = 0;\n var prev_vals_sum = 0;\n for (\n var j = 0;\n j < categories.length;\n j++\n ) {\n var new_val = parseFloat(\n d[value_key][categories[j]]\n );\n if (j < I) {\n prev_vals_sum += new_val;\n }\n total += new_val;\n }\n return (prev_vals_sum * 100) / total;\n },\n },\n ],\n exclude_from_legend: false,\n legend_config: { type: 'rule', target: legend_target },\n legend_label: categories[I],\n }\n );\n })(i);\n }\n }\n}\n\nexport class GeneticAlterationRuleSet extends LookupRuleSet {\n constructor(params: IGeneticAlterationRuleSetParams) {\n super(params);\n this.addRulesFromParams(params);\n this.addRule(NA_STRING, true, {\n shapes: params.na_shapes || makeNAShapes(params.na_z || 1),\n legend_label: params.na_legend_label || NA_LABEL,\n exclude_from_legend: false,\n legend_config: { type: 'rule', target: { na: true } },\n legend_order: Number.POSITIVE_INFINITY,\n });\n }\n\n private addRulesFromParams(params: IGeneticAlterationRuleSetParams) {\n const rule_params = params.rule_params;\n _.forEach(\n rule_params.conditional,\n (\n datumValuesToRuleParams: GeneticAlterationRuleParams['conditional']['datumKey'],\n datumKey: string\n ) => {\n _.forEach(\n datumValuesToRuleParams,\n (\n ruleParams: GeneticAlterationSingleRuleParams,\n commaSeparatedDatumValues: string\n ) => {\n const equiv_values = commaSeparatedDatumValues.split(\n ','\n );\n const legend_rule_target: any = {};\n legend_rule_target[\n equiv_values[0]\n ] = commaSeparatedDatumValues;\n const rule_id = this.addRule(\n datumKey,\n equiv_values[0] === '*' ? null : equiv_values[0],\n shallowExtend(ruleParams, {\n shapes: ruleParams.shapes,\n legend_config: {\n type: 'rule' as 'rule',\n target: legend_rule_target,\n },\n legend_base_color: ifndef(\n this.legend_base_color,\n [255, 255, 255, 1]\n ) as [number, number, number, number],\n })\n );\n for (let i = 1; i < equiv_values.length; i++) {\n this.linkExistingRule(\n datumKey,\n equiv_values[i] === '*'\n ? null\n : equiv_values[i],\n rule_id\n );\n }\n }\n );\n }\n );\n\n if (rule_params.always) {\n this.addRule(\n null,\n null,\n shallowExtend(rule_params.always, {\n shapes: rule_params.always.shapes,\n legend_config: { type: 'rule' as 'rule', target: {} },\n })\n );\n }\n }\n}\n\nexport class Rule {\n private shapes: Shape[];\n public legend_label: string;\n public legend_base_color?: RGBAColor;\n public exclude_from_legend?: boolean;\n private legend_config?: RuleLegendConfig;\n public legend_order?: number;\n\n constructor(params: RuleParams) {\n this.shapes = params.shapes.map(function(shape) {\n if (shape.type === 'rectangle') {\n return new Rectangle(shape);\n } else if (shape.type === 'triangle') {\n return new Triangle(shape);\n } else if (shape.type === 'ellipse') {\n return new Ellipse(shape);\n } else if (shape.type === 'line') {\n return new Line(shape);\n }\n return undefined;\n });\n this.legend_label =\n typeof params.legend_label === 'undefined'\n ? ''\n : params.legend_label;\n this.legend_base_color = params.legend_base_color;\n this.exclude_from_legend = params.exclude_from_legend;\n this.legend_config = params.legend_config;\n this.legend_order = params.legend_order;\n }\n public getLegendConfig() {\n return this.legend_config;\n }\n\n public apply(d: Datum, cell_width: number, cell_height: number) {\n // Gets concrete shapes (i.e. computed\n // real values from percentages)\n const concrete_shapes = [];\n for (let i = 0, shapes_len = this.shapes.length; i < shapes_len; i++) {\n concrete_shapes.push(\n this.shapes[i].getComputedParams(d, cell_width, cell_height)\n );\n }\n return concrete_shapes;\n }\n\n public isExcludedFromLegend() {\n return this.exclude_from_legend;\n }\n}\n\nclass GradientCategoricalRuleSet extends RuleSet {\n private gradientRuleSet: GradientRuleSet;\n private categoricalRuleSet: CategoricalRuleSet;\n constructor(params: IGradientAndCategoricalRuleSetParams) {\n super(params);\n // For the GradientCategoricalRuleSet a datum must always have a\n // value and may have a category attribute. A datum is 'NA'\n // when not meeting the requirements for the GradientRuleSet.\n // To achieve correct evaluation, the CategoricalRuleSet is\n // asked not to contribute an `NA` rule (via `true` flag).\n this.gradientRuleSet = new GradientRuleSet(params);\n this.categoricalRuleSet = new CategoricalRuleSet(params, true);\n }\n\n // RuleSet API\n public getSpecificShapesForDatum(\n data: Datum,\n cell_width: number,\n cell_height: number,\n out_active_rules: ActiveRules | undefined,\n data_id_key: string & keyof Datum,\n important_ids?: ColumnProp<boolean>\n ) {\n const shapes = [];\n // check the type of datum (categorical or continuous) and delegate\n // fetching of shapes to the appropriate RuleSet class\n for (let i = 0; i < data.length; i++) {\n const datum = data[i];\n if (this.isCategorical(datum)) {\n shapes.push(\n this.categoricalRuleSet.getSpecificShapesForDatum(\n [datum],\n cell_width,\n cell_height,\n out_active_rules,\n data_id_key,\n important_ids\n )[0]\n );\n } else {\n shapes.push(\n this.gradientRuleSet.getSpecificShapesForDatum(\n [datum],\n cell_width,\n cell_height,\n out_active_rules,\n data_id_key,\n important_ids\n )[0]\n );\n }\n }\n return shapes;\n }\n\n // RuleSet API\n public getSpecificRulesForDatum(datum?: Datum) {\n const categoricalRules = this.categoricalRuleSet.getSpecificRulesForDatum(\n datum\n );\n const gradientRules = this.gradientRuleSet.getSpecificRulesForDatum(\n datum\n );\n const rules = categoricalRules.concat(gradientRules);\n return rules;\n }\n\n // helper function\n public isCategorical(datum: Datum) {\n // A categorical value is recognized by presence of a category attribute.\n // Note: a categorical datum still requires a continuous value (used for clustering).\n return datum[this.categoricalRuleSet.category_key] !== undefined;\n }\n}\n\nexport default function(params: RuleSetParams) {\n let ret: RuleSet;\n switch (params.type) {\n case RuleSetType.CATEGORICAL:\n ret = new CategoricalRuleSet(params as ICategoricalRuleSetParams);\n break;\n case RuleSetType.GRADIENT:\n ret = new GradientRuleSet(params as IGradientRuleSetParams);\n break;\n case RuleSetType.GRADIENT_AND_CATEGORICAL:\n ret = new GradientCategoricalRuleSet(\n params as IGradientAndCategoricalRuleSetParams\n );\n break;\n case RuleSetType.BAR:\n ret = new BarRuleSet(params as IBarRuleSetParams);\n break;\n case RuleSetType.STACKED_BAR:\n ret = new StackedBarRuleSet(params as IStackedBarRuleSetParams);\n break;\n case RuleSetType.GENE:\n default:\n ret = new GeneticAlterationRuleSet(\n params as IGeneticAlterationRuleSetParams\n );\n break;\n }\n return ret;\n}\n","var img = \"data:image/svg+xml,%3c%3fxml version='1.0' encoding='utf-8'%3f%3e%3c!-- Generator: Adobe Illustrator 16.0.4%2c SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3e%3c!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='4px' height='16px' viewBox='-0.031 0 4 16' enable-background='new -0.031 0 4 16' xml:space='preserve'%3e%3ccircle fill='%23B2B3B3' cx='1.969' cy='4' r='1.5'/%3e%3ccircle fill='%23B2B3B3' cx='1.969' cy='8' r='1.5'/%3e%3ccircle fill='%23B2B3B3' cx='1.969' cy='12' r='1.5'/%3e%3c/svg%3e\";\n export default img;","import OncoprintModel from './oncoprintmodel';\nimport menuDotsIcon from '../img/menudots.svg';\nimport svgfactory from './svgfactory';\nimport $ from 'jquery';\nimport ClickEvent = JQuery.ClickEvent;\nimport { CLOSE_MENUS_EVENT as TRACK_OPTIONS_VIEW_CLOSE_MENUS_EVENT } from './oncoprinttrackoptionsview';\n\nconst MENU_DOTS_SIZE = 20;\nconst LABEL_CLASS = 'oncoprintjs__header__label';\nconst TOGGLE_BTN_CLASS = 'oncoprintjs__header__toggle_btn_img';\nconst TOGGLE_BTN_OPEN_CLASS = 'oncoprintjs__header__open';\nconst DROPDOWN_CLASS = 'oncoprintjs__header__dropdown';\nconst SEPARATOR_CLASS = 'oncoprintjs__header__separator';\nconst NTH_CLASS_PREFIX = 'track-group-';\n\nconst FADE_MS = 100;\n\nconst HEADER_FONT_SIZE = 16;\n\nexport const CLOSE_MENUS_EVENT = 'oncoprint-header-view.do-close-menus';\n\nexport default class OncoprintHeaderView {\n private rendering_suppressed = false;\n private $occluded_ctr: JQuery; // holds labels and menu buttons, which can be occluded by scrolling\n private $dropdowns_ctr: JQuery;\n private clickHandler: () => void;\n private $dropdowns: JQuery[] = [];\n\n constructor($div: JQuery) {\n $div.css({\n position: 'relative',\n 'pointer-events': 'none',\n });\n\n const $occluding_superctr = $('<div/>')\n .appendTo($div)\n .css({\n position: 'relative',\n 'overflow-y': 'hidden',\n 'overflow-x': 'hidden',\n width: '100%',\n height: '100%',\n });\n this.$occluded_ctr = $('<div/>')\n .appendTo($occluding_superctr)\n .css({\n position: 'absolute',\n width: '100%',\n height: '100%',\n });\n\n this.$dropdowns_ctr = $('<div/>')\n .appendTo($div)\n .css({\n position: 'absolute',\n width: '100%',\n height: '100%',\n });\n\n this.clickHandler = () => {\n $(document).trigger(CLOSE_MENUS_EVENT);\n };\n $(document).on('click', this.clickHandler);\n\n $(document).on(CLOSE_MENUS_EVENT, () => {\n this.closeAllDropdowns();\n });\n }\n\n public destroy() {\n $(document).off('click', this.clickHandler);\n $(document).off(CLOSE_MENUS_EVENT);\n }\n\n private closeAllDropdowns() {\n for (const $dropdown of this.$dropdowns) {\n $dropdown.fadeOut(FADE_MS);\n }\n }\n\n private closeDropdownsExcept($keep_open_dropdown: JQuery) {\n for (const $dropdown of this.$dropdowns) {\n if ($dropdown !== $keep_open_dropdown) {\n $dropdown.fadeOut(FADE_MS);\n }\n }\n $(document).trigger(TRACK_OPTIONS_VIEW_CLOSE_MENUS_EVENT);\n }\n\n private static $makeDropdownOption(\n text: string,\n weight: string,\n isDisabled?: () => boolean,\n callback?: (evt: ClickEvent) => void\n ) {\n const li = $('<li>')\n .text(text)\n .css({\n 'font-weight': weight,\n 'font-size': 12,\n 'border-bottom': '1px solid rgba(0,0,0,0.3)',\n });\n const disabled = isDisabled && isDisabled();\n if (!disabled) {\n if (callback) {\n li.addClass('clickable');\n li.css({ cursor: 'pointer' });\n li.click(callback).hover(\n function() {\n $(this).css({ 'background-color': 'rgb(200,200,200)' });\n },\n function() {\n $(this).css({\n 'background-color': 'rgba(255,255,255,0)',\n });\n }\n );\n } else {\n li.click(function(evt) {\n evt.stopPropagation();\n });\n }\n } else {\n li.addClass('disabled');\n li.css({ color: 'rgb(200, 200, 200)', cursor: 'default' });\n }\n return li;\n }\n\n private static $makeDropdownSeparator() {\n return $('<li>')\n .css({ 'border-top': '1px solid black' })\n .addClass(SEPARATOR_CLASS);\n }\n\n public render(model: OncoprintModel) {\n // clear existing elements\n this.$occluded_ctr.empty();\n this.$occluded_ctr.css({\n top: -model.getVertScroll(),\n });\n this.$dropdowns_ctr.empty();\n this.$dropdowns_ctr.css({\n top: -model.getVertScroll(),\n });\n this.$dropdowns = [];\n\n // add headers\n const trackGroups = model.getTrackGroups();\n const headerTops = model.getZoomedHeaderTops();\n\n trackGroups.forEach((group, trackGroupIndex) => {\n if (group.header) {\n const $headerDiv = $('<div/>').css({\n 'pointer-events': 'auto',\n });\n\n // add label\n $(`<span>${group.header.label.text}</span>`)\n .appendTo($headerDiv)\n .css({\n 'margin-right': 10,\n // TODO - custom styling\n 'font-weight': 'bold',\n 'text-decoration': 'underline',\n 'font-size': HEADER_FONT_SIZE,\n 'font-family': 'Arial',\n })\n .addClass(LABEL_CLASS);\n\n if (group.header.options.length > 0) {\n // add dropdown menu\n const $dropdown = $('<ul>')\n .appendTo(this.$dropdowns_ctr)\n .css({\n position: 'absolute',\n width: 120,\n display: 'none',\n 'list-style-type': 'none',\n 'padding-left': '6',\n 'padding-right': '6',\n float: 'right',\n 'background-color': 'rgb(255,255,255)',\n left: '0px',\n top: headerTops[trackGroupIndex] + MENU_DOTS_SIZE,\n 'pointer-events': 'auto',\n })\n .addClass(DROPDOWN_CLASS)\n .addClass(NTH_CLASS_PREFIX + trackGroupIndex);\n\n this.$dropdowns.push($dropdown);\n\n const populateDropdownOptions = () => {\n // repopulate dropdown every time it opens, and every time an option is clicked,\n // in order to update dynamic disabled status and weight\n $dropdown.empty();\n // add dropdown options\n group.header.options.forEach(option => {\n if (option.separator) {\n $dropdown.append(\n OncoprintHeaderView.$makeDropdownSeparator()\n );\n } else {\n $dropdown.append(\n OncoprintHeaderView.$makeDropdownOption(\n option.label || '',\n option.weight\n ? option.weight()\n : 'normal',\n option.disabled,\n function(evt) {\n evt.stopPropagation();\n option.onClick &&\n option.onClick(trackGroupIndex);\n populateDropdownOptions();\n }\n )\n );\n }\n });\n };\n\n // add dropdown button\n const $img = $('<img/>')\n .appendTo($headerDiv)\n .attr({\n src: menuDotsIcon,\n width: MENU_DOTS_SIZE,\n height: MENU_DOTS_SIZE,\n })\n .css({\n cursor: 'pointer',\n border: '1px solid rgba(125,125,125,0)',\n display: 'inline-block',\n })\n .addClass(TOGGLE_BTN_CLASS)\n .addClass(NTH_CLASS_PREFIX + trackGroupIndex)\n .on('click', evt => {\n evt.stopPropagation();\n if ($dropdown.is(':visible')) {\n $img.removeClass(TOGGLE_BTN_OPEN_CLASS);\n $dropdown.fadeOut(FADE_MS);\n } else {\n populateDropdownOptions();\n $dropdown.css('left', $img.offset().left);\n $img.addClass(TOGGLE_BTN_OPEN_CLASS);\n $dropdown.fadeIn(FADE_MS);\n this.closeDropdownsExcept($dropdown);\n }\n });\n }\n\n $headerDiv.css({\n position: 'absolute',\n top: headerTops[trackGroupIndex],\n left: 0,\n width: '100%',\n });\n this.$occluded_ctr.append($headerDiv);\n }\n });\n }\n\n public setScroll(model: OncoprintModel) {\n this.$occluded_ctr.css({\n top: -model.getVertScroll(),\n });\n this.$dropdowns_ctr.css({\n top: -model.getVertScroll(),\n });\n\n this.closeAllDropdowns();\n }\n\n public setVertScroll(model: OncoprintModel) {\n this.setScroll(model);\n }\n\n public suppressRendering() {\n this.rendering_suppressed = true;\n }\n public releaseRendering(model: OncoprintModel) {\n this.rendering_suppressed = false;\n this.render(model);\n }\n public toSVGGroup(\n model: OncoprintModel,\n offset_x: number,\n offset_y: number\n ) {\n const group = svgfactory.group(offset_x || 0, offset_y || 0);\n const trackGroups = model.getTrackGroups();\n const headerTops = model.getZoomedHeaderTops();\n\n trackGroups.forEach((trackGroup, index) => {\n const header = trackGroup.header;\n if (header) {\n const y = headerTops[index];\n group.appendChild(\n svgfactory.text(\n header.label.text,\n 0,\n y,\n HEADER_FONT_SIZE,\n 'Arial',\n 'bold',\n undefined,\n undefined,\n 'underline'\n )\n );\n }\n });\n\n return group;\n }\n}\n","import $ from 'jquery';\nimport menuDotsIcon from '../img/menudots.svg';\nimport OncoprintModel, {\n TrackGroupProp,\n TrackId,\n TrackProp,\n TrackSortDirection,\n} from './oncoprintmodel';\nimport ClickEvent = JQuery.ClickEvent;\nimport { CLOSE_MENUS_EVENT as HEADER_VIEW_CLOSE_MENUS_EVENT } from './oncoprintheaderview';\n\nconst TOGGLE_BTN_CLASS = 'oncoprintjs__track_options__toggle_btn_img';\nconst TOGGLE_BTN_OPEN_CLASS = 'oncoprintjs__track_options__open';\nconst DROPDOWN_CLASS = 'oncoprintjs__track_options__dropdown';\nconst SEPARATOR_CLASS = 'oncoprintjs__track_options__separator';\nconst NTH_CLASS_PREFIX = 'nth-';\n\nexport const CLOSE_MENUS_EVENT = 'oncoprint-track-options-view.do-close-menus';\n\ntype TrackCallback = (trackId: TrackId) => void;\nexport default class OncoprintTrackOptionsView {\n private $ctr: JQuery;\n private $buttons_ctr: JQuery;\n private $dropdown_ctr: JQuery;\n\n private img_size: number;\n private rendering_suppressed = false;\n private track_options_$elts: TrackProp<{\n $div: JQuery;\n $img: JQuery;\n $dropdown: JQuery;\n }> = {};\n private menu_shown: TrackProp<boolean> = {};\n private clickHandler: () => void;\n private interaction_disabled = false;\n\n constructor(\n private $div: JQuery,\n private moveUpCallback: TrackCallback,\n private moveDownCallback: TrackCallback,\n private removeCallback: TrackCallback,\n private sortChangeCallback: (\n trackId: TrackId,\n sortDirection: TrackSortDirection\n ) => void,\n private unexpandCallback: TrackCallback,\n private showGapsCallback: (trackId: TrackId, showGaps: boolean) => void\n ) {\n const position = $div.css('position');\n if (position !== 'absolute' && position !== 'relative') {\n console.log(\n 'WARNING: div passed to OncoprintTrackOptionsView must be absolute or relative positioned - layout problems will occur'\n );\n }\n\n this.$ctr = $('<div></div>')\n .css({\n position: 'absolute',\n 'overflow-y': 'hidden',\n 'overflow-x': 'hidden',\n })\n .appendTo(this.$div);\n this.$buttons_ctr = $('<div></div>')\n .css({ position: 'absolute' })\n .appendTo(this.$ctr);\n this.$dropdown_ctr = $('<div></div>')\n .css({ position: 'absolute' })\n .appendTo(this.$div);\n\n const self = this;\n this.clickHandler = function() {\n $(document).trigger(CLOSE_MENUS_EVENT);\n };\n $(document).on('click', this.clickHandler);\n }\n\n private renderAllOptions(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n const self = this;\n $(document).off(CLOSE_MENUS_EVENT);\n $(document).on(CLOSE_MENUS_EVENT, function() {\n self.hideAllMenus();\n });\n\n this.$buttons_ctr.empty();\n this.$dropdown_ctr.empty();\n this.scroll(model.getVertScroll());\n\n var tracks = model.getTracks();\n var minimum_track_height = Number.POSITIVE_INFINITY;\n for (let i = 0; i < tracks.length; i++) {\n minimum_track_height = Math.min(\n minimum_track_height,\n model.getTrackHeight(tracks[i])\n );\n }\n this.img_size = Math.floor(minimum_track_height * 0.75);\n\n for (let i = 0; i < tracks.length; i++) {\n this.renderTrackOptions(model, tracks[i], i);\n }\n }\n\n private scroll(scroll_y: number) {\n if (this.rendering_suppressed) {\n return;\n }\n this.$buttons_ctr.css({ top: -scroll_y });\n this.$dropdown_ctr.css({ top: -scroll_y });\n\n this.hideAllMenus();\n }\n\n private resize(model: OncoprintModel, getCellViewHeight: () => number) {\n if (this.rendering_suppressed) {\n return;\n }\n this.$div.css({ width: this.getWidth(), height: getCellViewHeight() });\n this.$ctr.css({ width: this.getWidth(), height: getCellViewHeight() });\n }\n\n private hideTrackMenu(track_id: TrackId) {\n this.menu_shown[track_id] = false;\n const $elts = this.track_options_$elts[track_id];\n $elts.$dropdown.css({ 'z-index': 1 });\n $elts.$dropdown.css({ border: '1px solid rgba(125,125,125,0)' });\n $elts.$img.css({ border: '1px solid rgba(125,125,125,0)' });\n $elts.$dropdown.fadeOut(100);\n }\n\n private showTrackMenu(track_id: TrackId) {\n this.menu_shown[track_id] = true;\n const $elts = this.track_options_$elts[track_id];\n $elts.$dropdown.css({ 'z-index': 10 });\n $elts.$dropdown.css({ border: '1px solid rgba(125,125,125,1)' });\n $elts.$img.css({ border: '1px solid rgba(125,125,125,1)' });\n $elts.$dropdown.fadeIn(100);\n }\n\n private hideAllMenus() {\n for (const track_id in this.track_options_$elts) {\n if (this.track_options_$elts.hasOwnProperty(track_id)) {\n this.hideTrackMenu(parseInt(track_id, 10));\n }\n }\n }\n\n private hideMenusExcept(track_id: TrackId) {\n for (const _other_track_id in this.track_options_$elts) {\n if (this.track_options_$elts.hasOwnProperty(_other_track_id)) {\n const other_track_id = parseInt(_other_track_id, 10);\n if (other_track_id === track_id) {\n continue;\n }\n this.hideTrackMenu(other_track_id);\n }\n }\n\n $(document).trigger(HEADER_VIEW_CLOSE_MENUS_EVENT);\n }\n\n private static $makeDropdownOption(\n text: string,\n weight: string,\n disabled?: boolean,\n callback?: (evt: ClickEvent) => void\n ) {\n const li = $('<li>')\n .text(text)\n .css({\n 'font-weight': weight,\n 'font-size': 12,\n 'border-bottom': '1px solid rgba(0,0,0,0.3)',\n });\n if (!disabled) {\n if (callback) {\n li.addClass('clickable');\n li.css({ cursor: 'pointer' });\n li.click(callback).hover(\n function() {\n $(this).css({ 'background-color': 'rgb(200,200,200)' });\n },\n function() {\n $(this).css({\n 'background-color': 'rgba(255,255,255,0)',\n });\n }\n );\n } else {\n li.click(function(evt) {\n evt.stopPropagation();\n });\n }\n } else {\n li.addClass('disabled');\n li.css({ color: 'rgb(200, 200, 200)', cursor: 'default' });\n }\n return li;\n }\n\n private static $makeDropdownSeparator() {\n return $('<li>')\n .css({ 'border-top': '1px solid black' })\n .addClass(SEPARATOR_CLASS);\n }\n\n private static renderSortArrow(\n $sortarrow: JQuery,\n model: OncoprintModel,\n track_id: TrackId\n ) {\n let sortarrow_char = '';\n if (model.isTrackSortDirectionChangeable(track_id)) {\n sortarrow_char = {\n '1':\n '<i class=\"fa fa-signal\" aria-hidden=\"true\" title=\"Sorted ascending\"></i>',\n '-1':\n '<i class=\"fa fa-signal\" style=\"transform: scaleX(-1);\" aria-hidden=\"true\" title=\"Sorted descending\"></i>',\n '0': '',\n }[model.getTrackSortDirection(track_id)];\n }\n $sortarrow.html(sortarrow_char);\n }\n\n private renderTrackOptions(\n model: OncoprintModel,\n track_id: TrackId,\n index: number\n ) {\n let $div: JQuery, $img: JQuery, $sortarrow: JQuery, $dropdown: JQuery;\n const top = model.getZoomedTrackTops(track_id);\n $div = $('<div>')\n .appendTo(this.$buttons_ctr)\n .css({\n position: 'absolute',\n left: '0px',\n top: top + 'px',\n 'white-space': 'nowrap',\n });\n $img = $('<img/>')\n .appendTo($div)\n .attr({\n src: menuDotsIcon,\n width: this.img_size,\n height: this.img_size,\n })\n .css({\n float: 'left',\n cursor: 'pointer',\n border: '1px solid rgba(125,125,125,0)',\n })\n .addClass(TOGGLE_BTN_CLASS)\n .addClass(NTH_CLASS_PREFIX + (index + 1));\n $sortarrow = $('<span>')\n .appendTo($div)\n .css({\n position: 'absolute',\n top: Math.floor(this.img_size / 4) + 'px',\n });\n $dropdown = $('<ul>')\n .appendTo(this.$dropdown_ctr)\n .css({\n position: 'absolute',\n width: 120,\n display: 'none',\n 'list-style-type': 'none',\n 'padding-left': '6',\n 'padding-right': '6',\n float: 'right',\n 'background-color': 'rgb(255,255,255)',\n left: '0px',\n top: top + this.img_size + 'px',\n })\n .addClass(DROPDOWN_CLASS)\n .addClass(NTH_CLASS_PREFIX + (index + 1));\n this.track_options_$elts[track_id] = {\n $div: $div,\n $img: $img,\n $dropdown: $dropdown,\n };\n\n OncoprintTrackOptionsView.renderSortArrow($sortarrow, model, track_id);\n\n const self = this;\n $img.hover(\n function(evt) {\n if (!self.menu_shown[track_id]) {\n $(this).css({ border: '1px solid rgba(125,125,125,0.3)' });\n }\n },\n function(evt) {\n if (!self.menu_shown[track_id]) {\n $(this).css({ border: '1px solid rgba(125,125,125,0)' });\n }\n }\n );\n $img.click(function(evt) {\n evt.stopPropagation();\n if ($dropdown.is(':visible')) {\n $img.addClass(TOGGLE_BTN_OPEN_CLASS);\n self.hideTrackMenu(track_id);\n } else {\n $img.removeClass(TOGGLE_BTN_OPEN_CLASS);\n self.showTrackMenu(track_id);\n }\n self.hideMenusExcept(track_id);\n });\n\n const movingDisabled =\n model.getTrackMovable(track_id) &&\n model.isTrackInClusteredGroup(track_id);\n\n if (model.getTrackMovable(track_id)) {\n $dropdown.append(\n OncoprintTrackOptionsView.$makeDropdownOption(\n 'Move up',\n 'normal',\n movingDisabled,\n function(evt) {\n evt.stopPropagation();\n self.moveUpCallback(track_id);\n }\n )\n );\n $dropdown.append(\n OncoprintTrackOptionsView.$makeDropdownOption(\n 'Move down',\n 'normal',\n movingDisabled,\n function(evt) {\n evt.stopPropagation();\n self.moveDownCallback(track_id);\n }\n )\n );\n }\n if (model.isTrackRemovable(track_id)) {\n $dropdown.append(\n OncoprintTrackOptionsView.$makeDropdownOption(\n 'Remove track',\n 'normal',\n false,\n function(evt) {\n evt.stopPropagation();\n self.removeCallback(track_id);\n }\n )\n );\n }\n if (model.isTrackSortDirectionChangeable(track_id)) {\n $dropdown.append(\n OncoprintTrackOptionsView.$makeDropdownSeparator()\n );\n let $sort_inc_li: JQuery;\n let $sort_dec_li: JQuery;\n let $dont_sort_li: JQuery;\n $sort_inc_li = OncoprintTrackOptionsView.$makeDropdownOption(\n 'Sort a-Z',\n model.getTrackSortDirection(track_id) === 1 ? 'bold' : 'normal',\n false,\n function(evt) {\n evt.stopPropagation();\n $sort_inc_li.css('font-weight', 'bold');\n $sort_dec_li.css('font-weight', 'normal');\n $dont_sort_li.css('font-weight', 'normal');\n self.sortChangeCallback(track_id, 1);\n OncoprintTrackOptionsView.renderSortArrow(\n $sortarrow,\n model,\n track_id\n );\n }\n );\n $sort_dec_li = OncoprintTrackOptionsView.$makeDropdownOption(\n 'Sort Z-a',\n model.getTrackSortDirection(track_id) === -1\n ? 'bold'\n : 'normal',\n false,\n function(evt) {\n evt.stopPropagation();\n $sort_inc_li.css('font-weight', 'normal');\n $sort_dec_li.css('font-weight', 'bold');\n $dont_sort_li.css('font-weight', 'normal');\n self.sortChangeCallback(track_id, -1);\n OncoprintTrackOptionsView.renderSortArrow(\n $sortarrow,\n model,\n track_id\n );\n }\n );\n $dont_sort_li = OncoprintTrackOptionsView.$makeDropdownOption(\n \"Don't sort track\",\n model.getTrackSortDirection(track_id) === 0 ? 'bold' : 'normal',\n false,\n function(evt) {\n evt.stopPropagation();\n $sort_inc_li.css('font-weight', 'normal');\n $sort_dec_li.css('font-weight', 'normal');\n $dont_sort_li.css('font-weight', 'bold');\n self.sortChangeCallback(track_id, 0);\n OncoprintTrackOptionsView.renderSortArrow(\n $sortarrow,\n model,\n track_id\n );\n }\n );\n $dropdown.append($sort_inc_li);\n $dropdown.append($sort_dec_li);\n $dropdown.append($dont_sort_li);\n }\n if (model.isTrackExpandable(track_id)) {\n $dropdown.append(\n OncoprintTrackOptionsView.$makeDropdownOption(\n model.getExpandButtonText(track_id),\n 'normal',\n false,\n function(evt) {\n evt.stopPropagation();\n // close the menu to discourage clicking again, as it\n // may take a moment to finish expanding\n self.renderAllOptions(model);\n model.expandTrack(track_id);\n }\n )\n );\n }\n if (model.isTrackExpanded(track_id)) {\n $dropdown.append(\n OncoprintTrackOptionsView.$makeDropdownOption(\n 'Remove expansion',\n 'normal',\n false,\n function(evt) {\n evt.stopPropagation();\n self.unexpandCallback(track_id);\n }\n )\n );\n }\n if (model.getTrackCanShowGaps(track_id)) {\n $dropdown.append(\n OncoprintTrackOptionsView.$makeDropdownSeparator()\n );\n const $show_gaps_opt = OncoprintTrackOptionsView.$makeDropdownOption(\n 'Show gaps',\n model.getTrackShowGaps(track_id) ? 'bold' : 'normal',\n false,\n function(evt) {\n evt.stopPropagation();\n $show_gaps_opt.css('font-weight', 'bold');\n $dont_show_gaps_opt.css('font-weight', 'normal');\n self.showGapsCallback(track_id, true);\n }\n );\n const $dont_show_gaps_opt = OncoprintTrackOptionsView.$makeDropdownOption(\n \"Don't show gaps\",\n model.getTrackShowGaps(track_id) ? 'normal' : 'bold',\n false,\n function(evt) {\n evt.stopPropagation();\n\n $show_gaps_opt.css('font-weight', 'normal');\n $dont_show_gaps_opt.css('font-weight', 'bold');\n self.showGapsCallback(track_id, false);\n }\n );\n $dropdown.append($show_gaps_opt);\n $dropdown.append($dont_show_gaps_opt);\n }\n // Add custom options\n const custom_options = model.getTrackCustomOptions(track_id);\n if (custom_options && custom_options.length > 0) {\n for (var i = 0; i < custom_options.length; i++) {\n (function() {\n // wrapped in function to prevent scope issues\n var option = custom_options[i];\n if (option.separator) {\n $dropdown.append(\n OncoprintTrackOptionsView.$makeDropdownSeparator()\n );\n } else {\n $dropdown.append(\n OncoprintTrackOptionsView.$makeDropdownOption(\n option.label || '',\n option.weight || 'normal',\n option.disabled,\n option.onClick &&\n function(evt) {\n evt.stopPropagation();\n option.onClick(track_id);\n }\n )\n );\n }\n })();\n }\n }\n\n if ($dropdown.is(':empty')) {\n // if no options, then delete elements\n $div.remove();\n $dropdown.remove();\n }\n }\n\n public enableInteraction() {\n this.interaction_disabled = false;\n }\n public disableInteraction() {\n this.interaction_disabled = true;\n }\n public suppressRendering() {\n this.rendering_suppressed = true;\n }\n public releaseRendering(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.rendering_suppressed = false;\n this.renderAllOptions(model);\n this.resize(model, getCellViewHeight);\n this.scroll(model.getVertScroll());\n }\n public setScroll(model: OncoprintModel) {\n this.setVertScroll(model);\n }\n public setHorzScroll(model: OncoprintModel) {}\n public setVertScroll(model: OncoprintModel) {\n this.scroll(model.getVertScroll());\n }\n public setZoom(model: OncoprintModel, getCellViewHeight: () => number) {\n this.setVertZoom(model, getCellViewHeight);\n }\n public setVertZoom(model: OncoprintModel, getCellViewHeight: () => number) {\n this.renderAllOptions(model);\n this.resize(model, getCellViewHeight);\n }\n public setTrackGroupHeader(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.renderAllOptions(model);\n this.resize(model, getCellViewHeight);\n }\n public sort(model: OncoprintModel, getCellViewHeight: () => number) {\n this.renderAllOptions(model);\n this.resize(model, getCellViewHeight);\n }\n public setViewport(model: OncoprintModel, getCellViewHeight: () => number) {\n this.renderAllOptions(model);\n this.resize(model, getCellViewHeight);\n this.scroll(model.getVertScroll());\n }\n public getWidth() {\n if (this.$buttons_ctr.is(':empty')) {\n return 0;\n } else {\n return 18 + this.img_size;\n }\n }\n public setTrackShowGaps(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.renderAllOptions(model);\n this.resize(model, getCellViewHeight);\n }\n public addTracks(model: OncoprintModel, getCellViewHeight: () => number) {\n this.renderAllOptions(model);\n this.resize(model, getCellViewHeight);\n }\n public moveTrack(model: OncoprintModel, getCellViewHeight: () => number) {\n this.renderAllOptions(model);\n this.resize(model, getCellViewHeight);\n }\n public setTrackGroupOrder(model: OncoprintModel) {\n this.renderAllOptions(model);\n }\n public setSortConfig(model: OncoprintModel) {\n this.renderAllOptions(model);\n }\n public removeTrack(\n model: OncoprintModel,\n track_id: TrackId,\n getCellViewHeight: () => number\n ) {\n delete this.track_options_$elts[track_id];\n this.renderAllOptions(model);\n this.resize(model, getCellViewHeight);\n }\n public destroy() {\n $(document).off('click', this.clickHandler);\n $(document).off(CLOSE_MENUS_EVENT);\n }\n public setTrackCustomOptions(model: OncoprintModel) {\n this.renderAllOptions(model);\n }\n public setTrackMovable(model: OncoprintModel) {\n this.renderAllOptions(model);\n }\n}\n","import svgfactory from './svgfactory';\nimport $ from 'jquery';\nimport OncoprintModel from './oncoprintmodel';\nimport { Rule, RuleWithId } from './oncoprintruleset';\n\nfunction nodeIsVisible(node: HTMLElement) {\n let ret = true;\n while (node && node.tagName.toLowerCase() !== 'html') {\n if ($(node).css('display') === 'none') {\n ret = false;\n break;\n }\n node = node.parentNode as HTMLElement;\n }\n return ret;\n}\n\nexport default class OncoprintLegendView {\n private $svg: JQuery<SVGElement>;\n private rendering_suppressed = false;\n private width: number;\n\n private rule_set_label_config = {\n weight: 'bold',\n size: 12,\n font: 'Arial',\n };\n private rule_label_config = {\n weight: 'normal',\n size: 12,\n font: 'Arial',\n };\n\n private padding_after_rule_set_label = 10;\n private padding_between_rules = 20;\n private padding_between_rule_set_rows = 10;\n\n constructor(\n private $div: JQuery,\n private base_width: number,\n private base_height: number\n ) {\n this.$svg = $(svgfactory.svg(200, 200)).appendTo(this.$div);\n this.width = $div.width();\n }\n\n private renderLegend(\n model: OncoprintModel,\n target_svg?: SVGElement,\n show_all?: boolean\n ) {\n if (this.rendering_suppressed) {\n return;\n }\n if (typeof target_svg === 'undefined') {\n target_svg = this.$svg[0];\n }\n if (!nodeIsVisible((target_svg as any) as HTMLElement)) {\n return;\n }\n $(target_svg).empty();\n const defs = svgfactory.defs();\n target_svg.appendChild(defs);\n\n const everything_group = svgfactory.group(0, 0);\n target_svg.appendChild(everything_group);\n\n const rule_sets = model.getRuleSets();\n let y = 0;\n const rule_start_x = 200;\n for (let i = 0; i < rule_sets.length; i++) {\n if (rule_sets[i].exclude_from_legend && !show_all) {\n continue;\n }\n const rules = model.getActiveRules(rule_sets[i].rule_set_id);\n if (rules.length === 0) {\n // dont render this ruleset into legend if no active rules\n continue;\n }\n const rule_set_group = svgfactory.group(0, y);\n everything_group.appendChild(rule_set_group);\n (function addLabel() {\n if (\n typeof rule_sets[i].legend_label !== 'undefined' &&\n rule_sets[i].legend_label.length > 0\n ) {\n const label = svgfactory.text(\n rule_sets[i].legend_label,\n 0,\n 0,\n 12,\n 'Arial',\n 'bold'\n );\n rule_set_group.appendChild(label);\n svgfactory.wrapText(label, rule_start_x);\n }\n })();\n\n let x = rule_start_x + this.padding_after_rule_set_label;\n let in_group_y_offset = 0;\n\n const labelSort = function(ruleA: RuleWithId, ruleB: RuleWithId) {\n const labelA = ruleA.rule.legend_label;\n const labelB = ruleB.rule.legend_label;\n if (labelA && labelB) {\n return labelA.localeCompare(labelB);\n } else if (!labelA && !labelB) {\n return 0;\n } else if (!labelA) {\n return -1;\n } else if (!labelB) {\n return 1;\n }\n return 0;\n };\n\n rules.sort(function(ruleA, ruleB) {\n // sort, by legend_order, then alphabetically\n const orderA = ruleA.rule.legend_order;\n const orderB = ruleB.rule.legend_order;\n\n if (\n typeof orderA === 'undefined' &&\n typeof orderB === 'undefined'\n ) {\n // if neither have defined order, then sort alphabetically\n return labelSort(ruleA, ruleB);\n } else if (\n typeof orderA !== 'undefined' &&\n typeof orderB !== 'undefined'\n ) {\n // if both have defined order, sort by order\n if (orderA < orderB) {\n return -1;\n } else if (orderA > orderB) {\n return 1;\n } else {\n // if order is same, sort alphabetically\n return labelSort(ruleA, ruleB);\n }\n } else if (typeof orderA === 'undefined') {\n if (orderB === Number.POSITIVE_INFINITY) {\n return -1; // A comes before B regardless, if B is forced to end\n } else {\n //otherwise, A comes after B if B has defined order and A doesnt\n return 1;\n }\n } else if (typeof orderB === 'undefined') {\n if (orderA === Number.POSITIVE_INFINITY) {\n return 1; // A comes after B regardless, if A is forced to end\n } else {\n // otherwise, A comes before B if A has defined order and B doesnt\n return -1;\n }\n }\n return 0;\n });\n for (let j = 0; j < rules.length; j++) {\n const rule = rules[j].rule;\n if (rule.exclude_from_legend) {\n continue;\n }\n const group = this.ruleToSVGGroup(\n rule,\n model,\n target_svg,\n defs\n );\n group.setAttribute(\n 'transform',\n 'translate(' + x + ',' + in_group_y_offset + ')'\n );\n rule_set_group.appendChild(group);\n if (x + group.getBBox().width > this.width) {\n x = rule_start_x + this.padding_after_rule_set_label;\n in_group_y_offset =\n rule_set_group.getBBox().height +\n this.padding_between_rule_set_rows;\n group.setAttribute(\n 'transform',\n 'translate(' + x + ',' + in_group_y_offset + ')'\n );\n }\n x += group.getBBox().width;\n x += this.padding_between_rules;\n }\n y += rule_set_group.getBBox().height;\n y += 3 * this.padding_between_rule_set_rows;\n }\n const everything_box = everything_group.getBBox();\n this.$svg[0].setAttribute('width', everything_box.width.toString());\n // add 10px to height to give room for rectangle stroke, which doesn't factor in accurately into the bounding box\n // so that bounding boxes are too small to show the entire stroke (see https://github.com/cBioPortal/cbioportal/issues/3994)\n this.$svg[0].setAttribute(\n 'height',\n (everything_box.height + 10).toString()\n );\n }\n\n private ruleToSVGGroup(\n rule: Rule,\n model: OncoprintModel,\n target_svg: SVGElement,\n target_defs: SVGDefsElement\n ) {\n const root = svgfactory.group(0, 0);\n const config = rule.getLegendConfig();\n if (config.type === 'rule') {\n const concrete_shapes = rule.apply(\n config.target,\n model.getCellWidth(true),\n this.base_height\n );\n if (rule.legend_base_color) {\n // generate backgrounds\n const baseRect = svgfactory.rect(\n 0,\n 0,\n model.getCellWidth(true),\n this.base_height,\n {\n type: 'rgba',\n value: rule.legend_base_color,\n }\n );\n root.appendChild(baseRect);\n }\n // generate shapes\n for (let i = 0; i < concrete_shapes.length; i++) {\n root.appendChild(\n svgfactory.fromShape(concrete_shapes[i], 0, 0)\n );\n }\n if (typeof rule.legend_label !== 'undefined') {\n const font_size = 12;\n const text_node = svgfactory.text(\n rule.legend_label,\n model.getCellWidth(true) + 5,\n this.base_height / 2,\n font_size,\n 'Arial',\n 'normal'\n );\n target_svg.appendChild(text_node);\n const height = text_node.getBBox().height;\n text_node.setAttribute(\n 'y',\n (\n parseFloat(text_node.getAttribute('y')) -\n height / 2\n ).toString()\n );\n target_svg.removeChild(text_node);\n root.appendChild(text_node);\n }\n } else if (config.type === 'number') {\n const num_decimal_digits = 2;\n const display_range = config.range.map(function(x) {\n const num_digit_multiplier = Math.pow(10, num_decimal_digits);\n return (\n Math.round(x * num_digit_multiplier) / num_digit_multiplier\n );\n });\n root.appendChild(\n svgfactory.text(\n display_range[0].toString(),\n 0,\n 0,\n 12,\n 'Arial',\n 'normal'\n )\n );\n root.appendChild(\n svgfactory.text(\n display_range[1].toString(),\n 50,\n 0,\n 12,\n 'Arial',\n 'normal'\n )\n );\n const mesh = 100;\n const points: [number, number][] = [];\n let fill = null;\n let linear_gradient = null;\n if (config.range_type === 'NON_POSITIVE') {\n fill = config.negative_color;\n } else if (config.range_type === 'NON_NEGATIVE') {\n fill = config.positive_color;\n } else if (config.range_type === 'ALL') {\n linear_gradient = svgfactory.linearGradient();\n const offset =\n (Math.abs(display_range[0]) /\n (Math.abs(display_range[0]) + display_range[1])) *\n 100;\n linear_gradient.appendChild(\n svgfactory.stop(offset, config.negative_color)\n );\n linear_gradient.appendChild(\n svgfactory.stop(offset, config.positive_color)\n );\n target_defs.appendChild(linear_gradient);\n }\n points.push([5, 20]);\n for (let i = 0; i < mesh; i++) {\n const t = i / mesh;\n const h = config.interpFn(\n (1 - t) * config.range[0] + t * config.range[1]\n );\n const height = 20 * h;\n points.push([5 + (40 * i) / mesh, 20 - height]);\n }\n points.push([45, 20]);\n root.appendChild(\n svgfactory.path(points, fill, fill, linear_gradient)\n );\n } else if (config.type === 'gradient') {\n const num_decimal_digits = 2;\n const display_range = config.range.map(function(x) {\n const num_digit_multiplier = Math.pow(10, num_decimal_digits);\n return (\n Math.round(x * num_digit_multiplier) / num_digit_multiplier\n );\n });\n const gradient = svgfactory.gradient(config.colorFn);\n const gradient_id = gradient.getAttribute('id');\n target_defs.appendChild(gradient);\n root.appendChild(\n svgfactory.text(\n display_range[0].toString(),\n 0,\n 0,\n 12,\n 'Arial',\n 'normal'\n )\n );\n root.appendChild(\n svgfactory.text(\n display_range[1].toString(),\n 120,\n 0,\n 12,\n 'Arial',\n 'normal'\n )\n );\n root.appendChild(\n svgfactory.rect(30, 0, 60, 20, {\n type: 'gradientId',\n value: gradient_id,\n })\n );\n }\n return root;\n }\n\n public setWidth(w: number, model: OncoprintModel) {\n this.width = w;\n this.renderLegend(model);\n }\n public removeTrack(model: OncoprintModel) {\n this.renderLegend(model);\n }\n\n public addTracks(model: OncoprintModel) {\n this.renderLegend(model);\n }\n\n public setTrackData(model: OncoprintModel) {\n this.renderLegend(model);\n }\n\n public setTrackImportantIds(model: OncoprintModel) {\n this.renderLegend(model);\n }\n\n public shareRuleSet(model: OncoprintModel) {\n this.renderLegend(model);\n }\n\n public setRuleSet(model: OncoprintModel) {\n this.renderLegend(model);\n }\n\n public setTrackGroupLegendOrder(model: OncoprintModel) {\n this.renderLegend(model);\n }\n\n public hideTrackLegends(model: OncoprintModel) {\n this.renderLegend(model);\n }\n\n public showTrackLegends(model: OncoprintModel) {\n this.renderLegend(model);\n }\n\n public suppressRendering() {\n this.rendering_suppressed = true;\n }\n\n public releaseRendering(model: OncoprintModel) {\n this.rendering_suppressed = false;\n this.renderLegend(model);\n }\n\n public toSVGGroup(\n model: OncoprintModel,\n offset_x: number,\n offset_y: number\n ) {\n const root = svgfactory.group(offset_x || 0, offset_y || 0);\n this.$svg.append(root);\n this.renderLegend(model, root, true);\n root.parentNode.removeChild(root);\n return root;\n }\n}\n","import $ from 'jquery';\n\nconst TOOLTIP_CLASS = 'oncoprintjs__tooltip';\n\nexport type OncoprintTooltipParams = { noselect?: boolean };\n\nexport default class OncoprintToolTip {\n private $div: JQuery;\n private hide_timeout_id: number | undefined;\n private show_timeout_id: number | undefined;\n public center: boolean;\n private shown: boolean;\n\n constructor(private $container: JQuery, params?: OncoprintTooltipParams) {\n params = params || {};\n\n this.$div = $('<div></div>')\n .addClass(TOOLTIP_CLASS)\n .appendTo($container)\n .css({\n 'background-color': 'rgba(255,255,255,1)',\n position: 'absolute',\n display: 'none',\n border: '1px solid black',\n 'max-width': 300,\n 'min-width': 150,\n });\n if (params.noselect) {\n this.$div.addClass('noselect');\n }\n this.hide_timeout_id = undefined;\n this.show_timeout_id = undefined;\n this.center = false;\n\n this.shown = false;\n\n const self = this;\n this.$div.on('mousemove', function(evt) {\n evt.stopPropagation();\n self.cancelScheduledHide();\n });\n this.$div.on('mouseleave', function(evt) {\n evt.stopPropagation();\n self.hide();\n });\n }\n public show(\n wait: number | undefined,\n viewport_x: number,\n viewport_y: number,\n $contents: JQuery,\n fade?: boolean\n ) {\n this.cancelScheduledHide();\n\n if (typeof wait !== 'undefined' && !this.shown) {\n const self = this;\n this.cancelScheduledShow();\n this.show_timeout_id = setTimeout(function() {\n self.doShow(viewport_x, viewport_y, $contents, fade);\n }, wait) as any;\n } else {\n this.doShow(viewport_x, viewport_y, $contents, fade);\n }\n }\n private doShow(\n viewport_x: number,\n viewport_y: number,\n $contents: JQuery,\n fade?: boolean\n ) {\n this.cancelScheduledShow();\n this.show_timeout_id = undefined;\n this.$div.empty();\n this.$div.css({ top: 0, left: 0, 'z-index': 9999 }); // put up top left so that it doesnt cause any page expansion, before the position calculation which depends on page size\n this.$div.append($contents);\n if (!fade) {\n this.$div.show();\n } else {\n this.$div.stop().fadeIn('fast');\n }\n // adjust tooltip position based on size of contents\n let x = viewport_x - (this.center ? this.$div.width() / 2 : 0);\n let y = viewport_y - this.$div.height();\n // clamp to visible area\n const min_padding = 20;\n y = Math.max(y, min_padding); // make sure not too high\n y = Math.min(y, $(window).height() - this.$div.height()); // make sure not too low\n x = Math.max(x, min_padding); // make sure not too left\n x = Math.min(x, $(window).width() - this.$div.width() - min_padding); // make sure not too right\n\n this.$div.css({ top: y, left: x, 'z-index': 9999 });\n this.shown = true;\n }\n private doHide(fade?: boolean) {\n this.cancelScheduledHide();\n this.hide_timeout_id = undefined;\n if (!fade) {\n this.$div.hide();\n } else {\n this.$div.fadeOut();\n }\n this.shown = false;\n }\n private cancelScheduledShow() {\n clearTimeout(this.show_timeout_id);\n this.show_timeout_id = undefined;\n }\n private cancelScheduledHide() {\n clearTimeout(this.hide_timeout_id);\n this.hide_timeout_id = undefined;\n }\n public showIfNotAlreadyGoingTo(\n wait: number | undefined,\n viewport_x: number,\n viewport_y: number,\n $contents: JQuery\n ) {\n if (typeof this.show_timeout_id === 'undefined') {\n this.show(wait, viewport_x, viewport_y, $contents);\n }\n }\n public hideIfNotAlreadyGoingTo(wait?: number) {\n if (typeof this.hide_timeout_id === 'undefined') {\n this.hide(wait);\n }\n }\n public hide(wait?: number) {\n this.cancelScheduledShow();\n\n if (!this.shown) {\n return;\n }\n\n if (typeof wait !== 'undefined') {\n const self = this;\n this.cancelScheduledHide();\n this.hide_timeout_id = setTimeout(function() {\n self.doHide();\n }, wait) as any;\n } else {\n this.doHide();\n }\n }\n public fadeIn(\n wait: number | undefined,\n viewport_x: number,\n viewport_y: number,\n $contents: JQuery\n ) {\n this.show(wait, viewport_x, viewport_y, $contents, true);\n }\n}\n","import svgfactory from './svgfactory';\nimport $ from 'jquery';\nimport OncoprintToolTip from './oncoprinttooltip';\nimport OncoprintModel from './oncoprintmodel';\n\nexport default class OncoprintTrackInfoView {\n private $ctr: JQuery;\n private $text_ctr: JQuery;\n private base_font_size = 12;\n private font_family = 'Arial';\n private font_weight = 'bold';\n private width = 0;\n private $label_elts: JQuery[] = [];\n private rendering_suppressed = false;\n private minimum_track_height: number;\n\n constructor(private $div: JQuery, private tooltip: OncoprintToolTip) {\n this.tooltip.center = false;\n\n this.$ctr = $('<div></div>')\n .css({\n position: 'absolute',\n 'overflow-y': 'hidden',\n 'overflow-x': 'hidden',\n })\n .appendTo(this.$div);\n this.$text_ctr = $('<div></div>')\n .css({ position: 'absolute' })\n .appendTo(this.$ctr);\n }\n\n private destroyLabelElts() {\n for (let i = 0; i < this.$label_elts.length; i++) {\n this.$label_elts[i].off('mousemove mouseleave');\n }\n this.$label_elts = [];\n }\n\n private renderAllInfo(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n this.$text_ctr.empty();\n this.destroyLabelElts();\n\n const tracks = model.getTracks();\n this.minimum_track_height = Number.POSITIVE_INFINITY;\n for (let i = 0; i < tracks.length; i++) {\n this.minimum_track_height = Math.min(\n this.minimum_track_height,\n model.getTrackHeight(tracks[i])\n );\n }\n\n this.width = 0;\n\n const label_tops = model.getLabelTops();\n this.scroll(model.getVertScroll());\n const font_size = this.getFontSize();\n\n const self = this;\n for (let j = 0; j < tracks.length; j++) {\n (function() {\n const i = j;\n const $new_label = $('<span>')\n .css({\n position: 'absolute',\n 'font-family': self.font_family,\n 'font-weight': self.font_weight,\n 'font-size': font_size,\n })\n .addClass('noselect');\n const text = model.getTrackInfo(tracks[i]);\n if (!text) {\n return;\n }\n $new_label.text(text);\n $new_label.appendTo(self.$text_ctr);\n self.$label_elts.push($new_label);\n setTimeout(function() {\n $new_label\n .on('mousemove', function() {\n const $tooltip_elt = model.$getTrackInfoTooltip(\n tracks[i]\n );\n if ($tooltip_elt) {\n const offset = $new_label[0].getBoundingClientRect();\n self.tooltip.fadeIn(\n 200,\n offset.left,\n offset.top,\n $tooltip_elt\n );\n }\n })\n .on('mouseleave', function() {\n self.tooltip.hideIfNotAlreadyGoingTo(150);\n });\n }, 0); // delay to give time for render before adding events\n const top =\n label_tops[tracks[i]] +\n (model.getCellHeight(tracks[i]) -\n $new_label.outerHeight()) /\n 2;\n $new_label.css({ top: top + 'px' });\n self.width = Math.max(\n 32,\n self.width,\n $new_label[0].clientWidth\n );\n })();\n }\n if (this.width > 0) {\n this.width += 10;\n }\n }\n private scroll(scroll_y: number) {\n if (this.rendering_suppressed) {\n return;\n }\n this.$text_ctr.css({ top: -scroll_y });\n }\n\n private resize(model: OncoprintModel, getCellViewHeight: () => number) {\n if (this.rendering_suppressed) {\n return;\n }\n this.$div.css({ width: this.getWidth(), height: getCellViewHeight() });\n this.$ctr.css({ width: this.getWidth(), height: getCellViewHeight() });\n }\n\n public getFontSize() {\n return Math.max(\n Math.min(this.base_font_size, this.minimum_track_height),\n 7\n );\n }\n public getWidth() {\n return this.width;\n }\n public addTracks(model: OncoprintModel, getCellViewHeight: () => number) {\n this.renderAllInfo(model);\n this.resize(model, getCellViewHeight);\n }\n public moveTrack(model: OncoprintModel, getCellViewHeight: () => number) {\n this.renderAllInfo(model);\n this.resize(model, getCellViewHeight);\n }\n public setTrackGroupOrder(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.renderAllInfo(model);\n this.resize(model, getCellViewHeight);\n }\n public removeTrack(model: OncoprintModel, getCellViewHeight: () => number) {\n this.renderAllInfo(model);\n this.resize(model, getCellViewHeight);\n }\n public setTrackInfo(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.renderAllInfo(model);\n this.resize(model, getCellViewHeight);\n }\n public setTrackGroupHeader(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.renderAllInfo(model);\n this.resize(model, getCellViewHeight);\n }\n public setScroll(model: OncoprintModel) {\n this.setVertScroll(model);\n }\n public setHorzScroll(model: OncoprintModel) {}\n public setVertScroll(model: OncoprintModel) {\n this.scroll(model.getVertScroll());\n }\n public setZoom(model: OncoprintModel, getCellViewHeight: () => number) {\n this.setVertZoom(model, getCellViewHeight);\n }\n\n public setViewport(model: OncoprintModel, getCellViewHeight: () => number) {\n this.renderAllInfo(model);\n this.resize(model, getCellViewHeight);\n this.scroll(model.getVertScroll());\n }\n public setVertZoom(model: OncoprintModel, getCellViewHeight: () => number) {\n this.renderAllInfo(model);\n this.resize(model, getCellViewHeight);\n }\n public suppressRendering() {\n this.rendering_suppressed = true;\n }\n public releaseRendering(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.rendering_suppressed = false;\n this.renderAllInfo(model);\n this.resize(model, getCellViewHeight);\n this.scroll(model.getVertScroll());\n }\n public destroy() {\n this.destroyLabelElts();\n }\n public toSVGGroup(\n model: OncoprintModel,\n offset_x: number,\n offset_y: number\n ) {\n const root = svgfactory.group(offset_x || 0, offset_y || 0);\n const cell_tops = model.getCellTops();\n const tracks = model.getTracks();\n\n const font_size = this.getFontSize();\n\n for (let i = 0; i < tracks.length; i++) {\n const track_id = tracks[i];\n const y = cell_tops[track_id] + model.getCellHeight(track_id) / 2;\n const info = model.getTrackInfo(track_id);\n const text_elt = svgfactory.text(\n info,\n 0,\n y,\n font_size,\n this.font_family,\n this.font_weight,\n 'bottom'\n );\n text_elt.setAttribute('dy', '0.35em');\n root.appendChild(text_elt);\n }\n return root;\n }\n}\n","import $ from 'jquery';\nimport MouseMoveEvent = JQuery.MouseMoveEvent;\nimport MouseDownEvent = JQuery.MouseDownEvent;\n\nconst VERTICAL = 'v';\nconst HORIZONTAL = 'h';\n\nfunction clamp(x: number) {\n return Math.max(Math.min(x, 1), 0);\n}\n\nexport type OncoprintZoomSliderParams = {\n btn_size: number;\n horizontal?: boolean;\n width?: number;\n\n vertical?: boolean; // either horizontal and width, or vertical and height, must be set\n height?: number;\n\n init_val: number;\n left: number;\n top: number;\n onChange: (val: number) => void;\n};\n\nexport default class OncoprintZoomSlider {\n private $div: JQuery;\n private onChange: OncoprintZoomSliderParams['onChange'];\n private value: number;\n private slider_bar_size: number;\n private orientation: 'v' | 'h';\n private $slider: JQuery;\n private $plus_btn: JQuery;\n private $minus_btn: JQuery;\n\n constructor(\n $container: JQuery,\n params?: Partial<OncoprintZoomSliderParams>\n ) {\n this.$div = $('<div>')\n .css({\n position: 'absolute',\n top: params.top || 0,\n left: params.left || 0,\n })\n .appendTo($container);\n params = params || {};\n params.btn_size = params.btn_size || 13;\n this.onChange = params.onChange || function() {};\n\n this.initialize(params as OncoprintZoomSliderParams);\n\n this.value = params.init_val === undefined ? 0.5 : params.init_val;\n this.slider_bar_size =\n (this.orientation === VERTICAL ? params.height : params.width) -\n 2 * params.btn_size;\n this.updateSliderPos();\n }\n\n private initialize(params: OncoprintZoomSliderParams) {\n var $ctr = this.$div;\n var icon_size = Math.round(params.btn_size * 0.7);\n var icon_padding = Math.round((params.btn_size - icon_size) / 2);\n var $slider_bar = $('<div>')\n .css({\n position: 'absolute',\n 'background-color': '#ffffff',\n outline: 'solid 1px black',\n })\n .appendTo($ctr);\n var $slider = $('<div>')\n .css({\n position: 'absolute',\n 'background-color': '#ffffff',\n border: 'solid 1px black',\n 'border-radius': '3px',\n cursor: 'pointer',\n })\n .appendTo($ctr);\n\n var $plus_btn = $('<div>')\n .css({\n position: 'absolute',\n 'min-height': params.btn_size,\n 'min-width': params.btn_size,\n 'background-color': '#ffffff',\n border: 'solid 1px black',\n 'border-radius': '3px',\n cursor: 'pointer',\n })\n .appendTo($ctr);\n $('<span>')\n .addClass('icon fa fa-plus')\n .css({\n position: 'absolute',\n top: icon_padding,\n left: icon_padding,\n 'min-width': icon_size,\n 'min-height': icon_size,\n })\n .appendTo($plus_btn);\n var $minus_btn = $('<div>')\n .css({\n position: 'absolute',\n 'min-height': params.btn_size,\n 'min-width': params.btn_size,\n 'background-color': '#ffffff',\n border: 'solid 1px black',\n 'border-radius': '3px',\n cursor: 'pointer',\n })\n .appendTo($ctr);\n $('<span>')\n .addClass('icon fa fa-minus')\n .css({\n position: 'absolute',\n top: icon_padding,\n left: icon_padding,\n 'min-width': icon_size,\n 'min-height': icon_size,\n })\n .appendTo($minus_btn);\n if (params.vertical) {\n $slider_bar.css({\n 'min-height': params.height - 2 * params.btn_size,\n 'min-width': Math.round(params.btn_size / 5),\n });\n $slider.css({\n 'min-height': Math.round(params.btn_size / 2),\n 'min-width': params.btn_size,\n });\n\n $plus_btn.css({ top: 0, left: 0 });\n $minus_btn.css({ top: params.height - params.btn_size, left: 0 });\n $slider_bar.css({\n top: params.btn_size,\n left: 0.4 * params.btn_size,\n });\n $slider.css({ left: 0 });\n this.orientation = VERTICAL;\n } else {\n $slider_bar.css({\n 'min-height': Math.round(params.btn_size / 5),\n 'min-width': params.width - 2 * params.btn_size,\n });\n $slider.css({\n 'min-height': params.btn_size,\n 'min-width': Math.round(params.btn_size / 2),\n });\n\n $plus_btn.css({ top: 0, left: params.width - params.btn_size });\n $minus_btn.css({ top: 0, left: 0 });\n $slider_bar.css({\n top: 0.4 * params.btn_size,\n left: params.btn_size,\n });\n $slider.css({ top: 0 });\n this.orientation = HORIZONTAL;\n }\n\n const self = this;\n\n $plus_btn.click(function() {\n self.value /= 0.7;\n params.onChange(self.value);\n });\n $minus_btn.click(function() {\n self.value *= 0.7;\n params.onChange(self.value);\n });\n\n [$slider, $plus_btn, $minus_btn].map(function($btn) {\n $btn.hover(\n function() {\n $(this).css({ 'background-color': '#cccccc' });\n },\n function() {\n $(this).css({ 'background-color': '#ffffff' });\n }\n );\n });\n\n this.$slider = $slider;\n this.$plus_btn = $plus_btn;\n this.$minus_btn = $minus_btn;\n\n (function setUpSliderDrag() {\n let start_mouse: number;\n let start_val: number;\n let dragging: boolean;\n function handleSliderDrag(evt: MouseMoveEvent) {\n evt.stopPropagation();\n evt.preventDefault();\n let delta_mouse;\n if (self.orientation === VERTICAL) {\n delta_mouse = start_mouse - evt.pageY; // vertical zoom, positive is up, but CSS positive is down, so we need to invert\n } else {\n delta_mouse = evt.pageX - start_mouse;\n }\n const delta_val = delta_mouse / self.slider_bar_size;\n self.setSliderValue(start_val + delta_val);\n }\n function stopSliderDrag() {\n if (dragging && start_val !== self.value) {\n self.onChange(self.value);\n }\n dragging = false;\n }\n self.$slider.on('mousedown', function(evt: MouseDownEvent) {\n if (self.orientation === VERTICAL) {\n start_mouse = evt.pageY;\n } else {\n start_mouse = evt.pageX;\n }\n start_val = self.value;\n dragging = true;\n $(document).on('mousemove', handleSliderDrag);\n });\n $(document).on('mouseup click', function() {\n $(document).off('mousemove', handleSliderDrag);\n stopSliderDrag();\n });\n })();\n }\n\n private updateSliderPos() {\n const proportion = this.value;\n var $slider = this.$slider;\n var bounds = this.getSliderBounds();\n if (this.orientation === VERTICAL) {\n $slider.css(\n 'top',\n bounds.bottom * (1 - proportion) + bounds.top * proportion\n );\n } else if (this.orientation === HORIZONTAL) {\n $slider.css(\n 'left',\n bounds.left * (1 - proportion) + bounds.right * proportion\n );\n }\n }\n\n private getSliderBounds() {\n if (this.orientation === VERTICAL) {\n return {\n bottom:\n parseInt(this.$minus_btn.css('top'), 10) -\n parseInt(this.$slider.css('min-height'), 10),\n top:\n parseInt(this.$plus_btn.css('top'), 10) +\n parseInt(this.$plus_btn.css('min-height'), 10),\n };\n } else {\n return {\n left:\n parseInt(this.$minus_btn.css('left'), 10) +\n parseInt(this.$minus_btn.css('min-width'), 10),\n right:\n parseInt(this.$plus_btn.css('left'), 10) -\n parseInt(this.$slider.css('min-width'), 10),\n };\n }\n }\n\n public setSliderValue(proportion: number) {\n this.value = clamp(proportion);\n this.updateSliderPos();\n }\n}\n","var img = \"data:image/svg+xml,%3c%3fxml version='1.0' encoding='utf-8'%3f%3e%3c!-- Generator: Adobe Illustrator 16.0.4%2c SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3e%3c!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='20px' height='20px' viewBox='0 0 20 20' enable-background='new 0 0 20 20' xml:space='preserve'%3e%3cline fill='none' x1='6.792' y1='5.667' x2='6.792' y2='12.125'/%3e%3cpolygon fill='black' points='0%2c5 0%2c0 5%2c0 '/%3e%3cpolygon fill='black' points='14.999%2c0 20%2c0 20%2c5 '/%3e%3cpolygon fill='black' points='20%2c15 20%2c20 15%2c20 '/%3e%3cpolygon fill='black' points='5%2c20 0%2c20 0%2c15 '/%3e%3crect x='3.75' y='4.708' fill='none' stroke='black' stroke-width='2' stroke-miterlimit='10' width='12.5' height='10.583'/%3e%3c/svg%3e\";\n export default img;","import gl_matrix from 'gl-matrix';\nimport OncoprintZoomSlider from './oncoprintzoomslider';\nimport $ from 'jquery';\nimport zoomToFitIcon from '../img/zoomtofit.svg';\nimport OncoprintModel, { ColumnIndex, TrackId } from './oncoprintmodel';\nimport OncoprintWebGLCellView, {\n OncoprintShaderProgram,\n OncoprintTrackBuffer,\n OncoprintVertexTrackBuffer,\n OncoprintWebGLContext,\n} from './oncoprintwebglcellview';\nimport MouseMoveEvent = JQuery.MouseMoveEvent;\nimport { clamp, cloneShallow } from './utils';\nimport _ from 'lodash';\n\nexport type MinimapViewportSpec = {\n left_col: ColumnIndex; // leftmost col included in viewport\n right_col: ColumnIndex; // col at the boundary of viewport, first col to the right of viewport\n scroll_y_proportion: number; // between 0 and 1\n zoom_y: number; // between 0 and 1\n};\n\ntype OverlayRectParams = {\n top: number;\n left_col: ColumnIndex;\n right_col: ColumnIndex;\n height: number;\n};\n\nclass OverlayRectSpec {\n constructor(\n private params: OverlayRectParams,\n private getCellWidth: () => number\n ) {}\n\n public setParams(p: OverlayRectParams) {\n this.params = p;\n }\n\n public clone() {\n return new OverlayRectSpec(\n cloneShallow(this.params),\n this.getCellWidth\n );\n }\n\n public get left_col() {\n return this.params.left_col;\n }\n\n public get right_col() {\n return this.params.right_col;\n }\n\n public get top() {\n return this.params.top;\n }\n\n public get height() {\n return this.params.height;\n }\n\n public get num_cols() {\n return this.right_col - this.left_col;\n }\n\n public get left() {\n return this.left_col * this.getCellWidth();\n }\n\n public get right() {\n return this.right_col * this.getCellWidth();\n }\n\n public get width() {\n return this.right - this.left;\n }\n}\n\nexport default class OncoprintMinimapView {\n private handleContextLost: () => void;\n private layout_numbers = {\n window_width: -1,\n window_height: -1,\n vertical_zoom_area_width: -1,\n horizontal_zoom_area_height: -1,\n padding: -1,\n window_bar_height: -1,\n canvas_left: -1,\n canvas_top: -1,\n };\n private current_rect: OverlayRectSpec;\n\n private $window_bar: JQuery;\n private $close_btn: JQuery;\n private horizontal_zoom: OncoprintZoomSlider;\n private vertical_zoom: OncoprintZoomSlider;\n\n private ctx: OncoprintWebGLContext | null;\n private ext: ANGLE_instanced_arrays | null;\n private overlay_ctx: CanvasRenderingContext2D | null;\n private pMatrix: any;\n private mvMatrix: any;\n private shader_program: OncoprintShaderProgram;\n\n private resize_hover:\n | 'r'\n | 'l'\n | 't'\n | 'b'\n | 'tl'\n | 'br'\n | 'bl'\n | 'tr'\n | false = false;\n\n private rendering_suppressed = false;\n private visible = false;\n\n constructor(\n private $div: JQuery,\n private $canvas: JQuery<HTMLCanvasElement>,\n private $overlay_canvas: JQuery<HTMLCanvasElement>,\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView,\n width: number,\n height: number,\n drag_callback: (x: number, y: number) => void,\n viewport_callback: (vp: MinimapViewportSpec) => void,\n horz_zoom_callback: (z: number) => void,\n vert_zoom_callback: (z: number) => void,\n zoom_to_fit_callback: () => void,\n close_callback: () => void\n ) {\n this.$div = $div;\n this.$canvas = $canvas;\n this.$overlay_canvas = $overlay_canvas;\n\n this.current_rect = new OverlayRectSpec(\n { top: 0, left_col: 0, right_col: 0, height: 0 },\n () => model.getCellWidth(true) * this.getZoom(model).x\n );\n\n const self = this;\n const padding = 4;\n const vertical_zoom_area_width = 20;\n const horizontal_zoom_area_height = 20;\n const window_bar_height = 20;\n\n this.handleContextLost = function() {\n // catch when context lost and refresh it\n // eg if cell view uses a ton of contexts, then browser clears oldest context,\n //\tthen the minimap would be empty until we refresh the context and rerender\n self.drawOncoprintAndOverlayRect(model, cell_view);\n }.bind(this);\n\n this.$canvas[0].addEventListener(\n 'webglcontextlost',\n this.handleContextLost\n );\n\n this.layout_numbers = {\n window_width: padding + width + padding + vertical_zoom_area_width,\n window_height:\n window_bar_height +\n padding +\n height +\n padding +\n horizontal_zoom_area_height,\n vertical_zoom_area_width: vertical_zoom_area_width,\n horizontal_zoom_area_height: horizontal_zoom_area_height,\n padding: padding,\n window_bar_height: window_bar_height,\n canvas_left: padding,\n canvas_top: window_bar_height + padding,\n };\n\n this.$div.css({\n 'min-width': this.layout_numbers.window_width,\n 'min-height': this.layout_numbers.window_height,\n outline: 'solid 1px black',\n 'background-color': '#ffffff',\n });\n\n this.$window_bar = $('<div>')\n .css({\n position: 'absolute',\n 'min-width': this.layout_numbers.window_width,\n 'min-height': this.layout_numbers.window_bar_height,\n 'background-color': '#cccccc',\n })\n .appendTo(this.$div);\n\n this.$close_btn = $('<div>')\n .css({\n position: 'absolute',\n top: 3,\n left: 3,\n 'min-width': this.layout_numbers.window_bar_height - 6,\n 'min-height': this.layout_numbers.window_bar_height - 6,\n cursor: 'pointer',\n })\n .appendTo(this.$div);\n $('<span>')\n .addClass('icon fa fa-times-circle')\n .css('font-size', this.layout_numbers.window_bar_height - 6 + 'px')\n .appendTo(this.$close_btn);\n\n this.$close_btn.click(close_callback || function() {});\n\n this.$canvas[0].width = width;\n this.$canvas[0].height = height;\n this.$canvas.css({\n top: this.layout_numbers.canvas_top,\n left: this.layout_numbers.canvas_left,\n });\n this.$overlay_canvas[0].width = width;\n this.$overlay_canvas[0].height = width;\n this.$overlay_canvas.css({\n top: this.layout_numbers.canvas_top,\n left: this.layout_numbers.canvas_left,\n outline: 'solid 1px #444444',\n });\n\n this.horizontal_zoom = new OncoprintZoomSlider(this.$div, {\n btn_size: this.layout_numbers.horizontal_zoom_area_height - padding,\n horizontal: true,\n width: width,\n init_val: model.getHorzZoom(),\n left: padding,\n top: this.layout_numbers.canvas_top + height + padding,\n onChange: function(val) {\n horz_zoom_callback(val);\n },\n });\n this.vertical_zoom = new OncoprintZoomSlider(this.$div, {\n btn_size: this.layout_numbers.vertical_zoom_area_width - padding,\n vertical: true,\n height: height,\n init_val: model.getVertZoom(),\n left: this.layout_numbers.canvas_left + width + padding,\n top: this.layout_numbers.window_bar_height + padding,\n onChange: function(val) {\n vert_zoom_callback(val);\n },\n });\n\n (function setUpZoomToFitButton() {\n const btn_height =\n self.layout_numbers.horizontal_zoom_area_height - padding;\n const btn_width =\n self.layout_numbers.vertical_zoom_area_width - padding;\n const $btn = $('<div>')\n .css({\n position: 'absolute',\n height: btn_height,\n width: btn_width,\n outline: 'solid 1px black',\n left: self.layout_numbers.canvas_left + width + padding,\n top: self.layout_numbers.canvas_top + height + padding,\n cursor: 'pointer',\n })\n .addClass('oncoprint-zoomtofit-btn')\n .appendTo($div);\n $(`<img src=\"${zoomToFitIcon}\" />`)\n .css({\n height: btn_height - 4,\n width: btn_width - 4,\n 'margin-top': -6,\n 'margin-left': 2,\n })\n .appendTo($btn);\n $btn.hover(\n function() {\n $(this).css({ 'background-color': '#cccccc' });\n },\n function() {\n $(this).css({ 'background-color': '#ffffff' });\n }\n );\n\n zoom_to_fit_callback = zoom_to_fit_callback || function() {};\n $btn.click(zoom_to_fit_callback);\n })();\n this.getWebGLContextAndSetUpMatrices();\n this.setUpShaders();\n this.overlay_ctx = $overlay_canvas[0].getContext('2d');\n\n // Set up dragging\n const resize_hit_zone = 5;\n function mouseInRectDragZone(x: number, y: number) {\n return (\n x >= self.current_rect.left + resize_hit_zone &&\n x <=\n self.current_rect.left +\n self.current_rect.width -\n resize_hit_zone &&\n y >= self.current_rect.top + resize_hit_zone &&\n y <=\n self.current_rect.top +\n self.current_rect.height -\n resize_hit_zone\n );\n }\n\n function mouseInsideRectHitZone(x: number, y: number) {\n return (\n x >= self.current_rect.left - resize_hit_zone &&\n x <=\n self.current_rect.left +\n self.current_rect.width +\n resize_hit_zone &&\n y >= self.current_rect.top - resize_hit_zone &&\n y <=\n self.current_rect.top +\n self.current_rect.height +\n resize_hit_zone\n );\n }\n\n function mouseInRightHorzResizeZone(x: number, y: number) {\n return (\n !mouseInTopLeftResizeZone(x, y) &&\n !mouseInTopRightResizeZone(x, y) &&\n !mouseInBottomLeftResizeZone(x, y) &&\n !mouseInBottomRightResizeZone(x, y) &&\n mouseInsideRectHitZone(x, y) &&\n Math.abs(\n x - (self.current_rect.left + self.current_rect.width)\n ) < resize_hit_zone\n );\n }\n\n function mouseInLeftHorzResizeZone(x: number, y: number) {\n return (\n !mouseInTopLeftResizeZone(x, y) &&\n !mouseInTopRightResizeZone(x, y) &&\n !mouseInBottomLeftResizeZone(x, y) &&\n !mouseInBottomRightResizeZone(x, y) &&\n mouseInsideRectHitZone(x, y) &&\n Math.abs(x - self.current_rect.left) < resize_hit_zone\n );\n }\n\n function mouseInTopVertResizeZone(x: number, y: number) {\n return (\n !mouseInTopLeftResizeZone(x, y) &&\n !mouseInTopRightResizeZone(x, y) &&\n !mouseInBottomLeftResizeZone(x, y) &&\n !mouseInBottomRightResizeZone(x, y) &&\n mouseInsideRectHitZone(x, y) &&\n Math.abs(y - self.current_rect.top) < resize_hit_zone\n );\n }\n\n function mouseInBottomVertResizeZone(x: number, y: number) {\n return (\n !mouseInTopLeftResizeZone(x, y) &&\n !mouseInTopRightResizeZone(x, y) &&\n !mouseInBottomLeftResizeZone(x, y) &&\n !mouseInBottomRightResizeZone(x, y) &&\n mouseInsideRectHitZone(x, y) &&\n Math.abs(\n y - (self.current_rect.top + self.current_rect.height)\n ) < resize_hit_zone\n );\n }\n\n function mouseInTopLeftResizeZone(x: number, y: number) {\n return (\n Math.abs(y - self.current_rect.top) < resize_hit_zone &&\n Math.abs(x - self.current_rect.left) < resize_hit_zone\n );\n }\n\n function mouseInBottomLeftResizeZone(x: number, y: number) {\n return (\n Math.abs(\n y - (self.current_rect.top + self.current_rect.height)\n ) < resize_hit_zone &&\n Math.abs(x - self.current_rect.left) < resize_hit_zone\n );\n }\n\n function mouseInTopRightResizeZone(x: number, y: number) {\n return (\n Math.abs(y - self.current_rect.top) < resize_hit_zone &&\n Math.abs(\n x - (self.current_rect.left + self.current_rect.width)\n ) < resize_hit_zone\n );\n }\n\n function mouseInBottomRightResizeZone(x: number, y: number) {\n return (\n Math.abs(\n y - (self.current_rect.top + self.current_rect.height)\n ) < resize_hit_zone &&\n Math.abs(\n x - (self.current_rect.left + self.current_rect.width)\n ) < resize_hit_zone\n );\n }\n\n function updateRectResizeHoverLocation(x?: number, y?: number) {\n if (typeof x === 'undefined') {\n self.resize_hover = false;\n } else {\n if (mouseInRightHorzResizeZone(x, y)) {\n self.resize_hover = 'r';\n } else if (mouseInLeftHorzResizeZone(x, y)) {\n self.resize_hover = 'l';\n } else if (mouseInTopVertResizeZone(x, y)) {\n self.resize_hover = 't';\n } else if (mouseInBottomVertResizeZone(x, y)) {\n self.resize_hover = 'b';\n } else if (mouseInTopLeftResizeZone(x, y)) {\n self.resize_hover = 'tl';\n } else if (mouseInBottomRightResizeZone(x, y)) {\n self.resize_hover = 'br';\n } else if (mouseInBottomLeftResizeZone(x, y)) {\n self.resize_hover = 'bl';\n } else if (mouseInTopRightResizeZone(x, y)) {\n self.resize_hover = 'tr';\n } else {\n self.resize_hover = false;\n }\n }\n }\n\n function updateCSSCursor(x?: number, y?: number) {\n let cursor_val;\n if (typeof x === 'undefined') {\n cursor_val = 'auto';\n } else {\n if (mouseInRectDragZone(x, y)) {\n cursor_val = 'move';\n } else if (\n mouseInRightHorzResizeZone(x, y) ||\n mouseInLeftHorzResizeZone(x, y)\n ) {\n cursor_val = 'ew-resize';\n } else if (\n mouseInTopVertResizeZone(x, y) ||\n mouseInBottomVertResizeZone(x, y)\n ) {\n cursor_val = 'ns-resize';\n } else if (\n mouseInTopLeftResizeZone(x, y) ||\n mouseInBottomRightResizeZone(x, y)\n ) {\n cursor_val = 'nwse-resize';\n } else if (\n mouseInBottomLeftResizeZone(x, y) ||\n mouseInTopRightResizeZone(x, y)\n ) {\n cursor_val = 'nesw-resize';\n } else {\n cursor_val = 'auto';\n }\n }\n $div.css('cursor', cursor_val);\n }\n\n function getCanvasMouse(\n view: OncoprintMinimapView,\n div_mouse_x: number,\n div_mouse_y: number\n ) {\n const canv_top = parseInt(view.$canvas[0].style.top, 10);\n const canv_left = parseInt(view.$canvas[0].style.left, 10);\n const canv_width = parseInt(view.$canvas[0].width as any, 10);\n const canv_height = parseInt(view.$canvas[0].height as any, 10);\n\n const mouse_x = div_mouse_x - canv_left;\n const mouse_y = div_mouse_y - canv_top;\n\n const outside =\n mouse_x < 0 ||\n mouse_x >= canv_width ||\n mouse_y < 0 ||\n mouse_y >= canv_height;\n\n return { mouse_x: mouse_x, mouse_y: mouse_y, outside: outside };\n }\n\n let dragging = false;\n let drag_type:\n | 'move'\n | 'resize_r'\n | 'resize_l'\n | 'resize_b'\n | 'resize_t'\n | 'resize_tr'\n | 'resize_br'\n | 'resize_tl'\n | 'resize_bl'\n | false = false;\n let drag_start_col = -1;\n let drag_start_vert_scroll = -1;\n let drag_start_x = -1;\n let drag_start_y = -1;\n let drag_start_vert_zoom = -1;\n let y_ratio = -1;\n let drag_start_rect: OverlayRectSpec;\n\n $(document).on('mousedown', function(evt) {\n const offset = self.$div.offset();\n const overlay_mouse_x = evt.pageX - offset.left;\n const overlay_mouse_y = evt.pageY - offset.top;\n const mouse = getCanvasMouse(\n self,\n overlay_mouse_x,\n overlay_mouse_y\n );\n\n if (!mouse.outside) {\n const mouse_x = mouse.mouse_x;\n const mouse_y = mouse.mouse_y;\n dragging = false;\n drag_type = false;\n\n y_ratio =\n model.getOncoprintHeight() /\n parseInt(self.$canvas[0].height as any, 10);\n if (mouseInRectDragZone(mouse_x, mouse_y)) {\n drag_type = 'move';\n } else if (mouseInRightHorzResizeZone(mouse_x, mouse_y)) {\n drag_type = 'resize_r';\n } else if (mouseInLeftHorzResizeZone(mouse_x, mouse_y)) {\n drag_type = 'resize_l';\n } else if (mouseInTopVertResizeZone(mouse_x, mouse_y)) {\n drag_type = 'resize_t';\n } else if (mouseInBottomVertResizeZone(mouse_x, mouse_y)) {\n drag_type = 'resize_b';\n } else if (mouseInTopRightResizeZone(mouse_x, mouse_y)) {\n drag_type = 'resize_tr';\n } else if (mouseInBottomRightResizeZone(mouse_x, mouse_y)) {\n drag_type = 'resize_br';\n } else if (mouseInTopLeftResizeZone(mouse_x, mouse_y)) {\n drag_type = 'resize_tl';\n } else if (mouseInBottomLeftResizeZone(mouse_x, mouse_y)) {\n drag_type = 'resize_bl';\n }\n if (drag_type !== false) {\n dragging = true;\n drag_start_x = mouse_x;\n drag_start_y = mouse_y;\n drag_start_col = model.getClosestColumnIndexToLeft(\n model.getHorzScroll(),\n true\n );\n drag_start_vert_scroll = model.getVertScroll();\n drag_start_vert_zoom = model.getVertZoom();\n drag_start_rect = self.current_rect.clone();\n }\n }\n });\n $(document).on('mousemove', function(evt) {\n const offset = self.$div.offset();\n const overlay_mouse_x = evt.pageX - offset.left;\n const overlay_mouse_y = evt.pageY - offset.top;\n const mouse = getCanvasMouse(\n self,\n overlay_mouse_x,\n overlay_mouse_y\n );\n const mouse_x = mouse.mouse_x;\n const mouse_y = mouse.mouse_y;\n let zoom = self.getZoom(model);\n let cell_width = model.getCellWidth(true) * zoom.x;\n if (dragging) {\n evt.preventDefault();\n let delta_col =\n Math.floor(mouse_x / cell_width) -\n Math.floor(drag_start_x / cell_width);\n let delta_y = mouse_y - drag_start_y;\n if (drag_type === 'move') {\n const delta_y_scroll = delta_y * y_ratio;\n drag_callback(\n self.colToLeft(\n model,\n clamp(\n drag_start_col + delta_col,\n 0,\n model.getIdOrder().length - 1\n )\n ),\n drag_start_vert_scroll + delta_y_scroll\n );\n } else {\n let render_rect: OverlayRectParams;\n zoom = self.getZoom(model);\n const max_num_cols = model.getIdOrder().length;\n const min_num_cols = Math.ceil(\n cell_view.getVisibleAreaWidth() /\n (model.getCellWidth(true) +\n model.getCellPadding(true, true))\n );\n const max_height = model.getOncoprintHeight(true) * zoom.y;\n const min_height =\n cell_view.getVisibleAreaHeight(model) * zoom.y;\n const drag_start_right_col = drag_start_rect.right_col;\n const drag_start_bottom =\n drag_start_rect.top + drag_start_rect.height;\n if (drag_type === 'resize_r') {\n // Width must be valid\n delta_col = clamp(\n delta_col,\n min_num_cols - drag_start_rect.num_cols,\n max_num_cols - drag_start_rect.num_cols\n );\n // Right must be valid\n delta_col = Math.min(\n delta_col,\n max_num_cols - drag_start_right_col\n );\n render_rect = {\n top: drag_start_rect.top,\n left_col: drag_start_rect.left_col,\n right_col: drag_start_rect.right_col + delta_col,\n height: drag_start_rect.height,\n };\n } else if (drag_type === 'resize_l') {\n // Width must be valid\n delta_col = clamp(\n delta_col,\n drag_start_rect.num_cols - max_num_cols,\n drag_start_rect.num_cols - min_num_cols\n );\n // Left must be valid\n delta_col = Math.max(\n delta_col,\n -drag_start_rect.left_col\n );\n render_rect = {\n top: drag_start_rect.top,\n left_col: drag_start_rect.left_col + delta_col,\n right_col: drag_start_rect.right_col,\n height: drag_start_rect.height,\n };\n } else if (drag_type === 'resize_t') {\n // Height must be valid\n delta_y = clamp(\n delta_y,\n drag_start_rect.height - max_height,\n drag_start_rect.height - min_height\n );\n // Top must be valid\n delta_y = Math.max(delta_y, -drag_start_rect.top);\n render_rect = {\n top: drag_start_rect.top + delta_y,\n left_col: drag_start_rect.left_col,\n right_col: drag_start_rect.right_col,\n height: drag_start_rect.height - delta_y,\n };\n } else if (drag_type === 'resize_b') {\n // Height must be valid\n delta_y = clamp(\n delta_y,\n min_height - drag_start_rect.height,\n max_height - drag_start_rect.height\n );\n // Bottom must be valid\n delta_y = Math.min(\n delta_y,\n max_height - drag_start_bottom\n );\n render_rect = {\n top: drag_start_rect.top,\n left_col: drag_start_rect.left_col,\n right_col: drag_start_rect.right_col,\n height: drag_start_rect.height + delta_y,\n };\n } else if (drag_type === 'resize_tr') {\n // Width must be valid\n delta_col = clamp(\n delta_col,\n min_num_cols - drag_start_rect.num_cols,\n max_num_cols - drag_start_rect.num_cols\n );\n // Right must be valid\n delta_col = Math.min(\n delta_col,\n max_num_cols - drag_start_right_col\n );\n // Height must be valid\n delta_y = clamp(\n delta_y,\n drag_start_rect.height - max_height,\n drag_start_rect.height - min_height\n );\n // Top must be valid\n delta_y = Math.max(delta_y, -drag_start_rect.top);\n render_rect = {\n top: drag_start_rect.top + delta_y,\n left_col: drag_start_rect.left_col,\n right_col: drag_start_rect.right_col + delta_col,\n height: drag_start_rect.height - delta_y,\n };\n } else if (drag_type === 'resize_tl') {\n // Width must be valid\n delta_col = clamp(\n delta_col,\n drag_start_rect.num_cols - max_num_cols,\n drag_start_rect.num_cols - min_num_cols\n );\n // Left must be valid\n delta_col = Math.max(\n delta_col,\n -drag_start_rect.left_col\n );\n // Height must be valid\n delta_y = clamp(\n delta_y,\n drag_start_rect.height - max_height,\n drag_start_rect.height - min_height\n );\n // Top must be valid\n delta_y = Math.max(delta_y, -drag_start_rect.top);\n render_rect = {\n top: drag_start_rect.top + delta_y,\n left_col: drag_start_rect.left_col + delta_col,\n right_col: drag_start_rect.right_col,\n height: drag_start_rect.height - delta_y,\n };\n } else if (drag_type === 'resize_br') {\n // Height must be valid\n delta_y = clamp(\n delta_y,\n min_height - drag_start_rect.height,\n max_height - drag_start_rect.height\n );\n // Bottom must be valid\n delta_y = Math.min(\n delta_y,\n max_height - drag_start_bottom\n );\n // Width must be valid\n delta_col = clamp(\n delta_col,\n min_num_cols - drag_start_rect.num_cols,\n max_num_cols - drag_start_rect.num_cols\n );\n // Right must be valid\n delta_col = Math.min(\n delta_col,\n max_num_cols - drag_start_right_col\n );\n render_rect = {\n top: drag_start_rect.top,\n left_col: drag_start_rect.left_col,\n right_col: drag_start_rect.right_col + delta_col,\n height: drag_start_rect.height + delta_y,\n };\n } else if (drag_type === 'resize_bl') {\n // Height must be valid\n delta_y = clamp(\n delta_y,\n min_height - drag_start_rect.height,\n max_height - drag_start_rect.height\n );\n // Bottom must be valid\n delta_y = Math.min(\n delta_y,\n max_height - drag_start_bottom\n );\n // Width must be valid\n delta_col = clamp(\n delta_col,\n drag_start_rect.num_cols - max_num_cols,\n drag_start_rect.num_cols - min_num_cols\n );\n // Left must be valid\n delta_col = Math.max(\n delta_col,\n -drag_start_rect.left_col\n );\n render_rect = {\n top: drag_start_rect.top,\n left_col: drag_start_rect.left_col + delta_col,\n right_col: drag_start_rect.right_col,\n height: drag_start_rect.height + delta_y,\n };\n }\n self.current_rect.setParams(render_rect);\n self.drawOverlayRect(null, null, self.current_rect);\n }\n } else {\n if (mouse.outside) {\n updateCSSCursor();\n updateRectResizeHoverLocation();\n } else {\n updateCSSCursor(mouse_x, mouse_y);\n updateRectResizeHoverLocation(mouse_x, mouse_y);\n }\n self.drawOverlayRect(model, cell_view);\n }\n });\n\n function endDrag() {\n if (dragging) {\n if (\n [\n 'resize_t',\n 'resize_b',\n 'resize_l',\n 'resize_r',\n 'resize_tl',\n 'resize_tr',\n 'resize_bl',\n 'resize_br',\n ].indexOf(drag_type as any) > -1\n ) {\n viewport_callback({\n left_col: self.current_rect.left_col,\n scroll_y_proportion:\n self.current_rect.top /\n parseInt(self.$canvas[0].height as any, 10),\n right_col: self.current_rect.right_col,\n zoom_y:\n (drag_start_rect.height /\n self.current_rect.height) *\n drag_start_vert_zoom,\n });\n }\n dragging = false;\n drag_type = false;\n }\n }\n\n $(document).on('mouseup', function(evt) {\n const offset = self.$div.offset();\n const overlay_mouse_x = evt.pageX - offset.left;\n const overlay_mouse_y = evt.pageY - offset.top;\n endDrag();\n const mouse = getCanvasMouse(\n self,\n overlay_mouse_x,\n overlay_mouse_y\n );\n if (!mouse.outside) {\n let mouse_x = mouse.mouse_x;\n let mouse_y = mouse.mouse_y;\n updateCSSCursor(mouse_x, mouse_y);\n updateRectResizeHoverLocation(mouse_x, mouse_y);\n } else {\n updateCSSCursor();\n updateRectResizeHoverLocation();\n }\n self.drawOverlayRect(model, cell_view);\n });\n\n (function setUpWindowDrag() {\n let start_mouse_x = 0;\n let start_mouse_y = 0;\n let start_left = 0;\n let start_top = 0;\n function handleDrag(evt: MouseMoveEvent) {\n evt.preventDefault();\n const delta_mouse_x = evt.pageX - start_mouse_x;\n const delta_mouse_y = evt.pageY - start_mouse_y;\n self.setWindowPosition(\n start_left + delta_mouse_x,\n start_top + delta_mouse_y\n );\n }\n self.$window_bar.hover(\n function() {\n $(this).css({ cursor: 'move' });\n },\n function() {\n $(this).css({ cursor: 'auto' });\n }\n );\n\n self.$window_bar.on('mousedown', function(evt) {\n start_mouse_x = evt.pageX;\n start_mouse_y = evt.pageY;\n start_left = parseInt(self.$div.css('left'), 10);\n start_top = parseInt(self.$div.css('top'), 10);\n $(document).on('mousemove', handleDrag);\n });\n $(document).on('mouseup click', function() {\n $(document).off('mousemove', handleDrag);\n });\n })();\n }\n\n private colToLeft(model: OncoprintModel, colIndex: number) {\n return model.getZoomedColumnLeft(model.getIdOrder()[colIndex]);\n }\n\n private get shouldRender() {\n return this.visible && !this.rendering_suppressed;\n }\n\n private getNewCanvas() {\n const old_canvas = this.$canvas[0];\n old_canvas.removeEventListener(\n 'webglcontextlost',\n this.handleContextLost\n );\n const new_canvas = old_canvas.cloneNode();\n new_canvas.addEventListener('webglcontextlost', this.handleContextLost);\n const parent_node = old_canvas.parentNode;\n parent_node.removeChild(old_canvas);\n parent_node.insertBefore(new_canvas, this.$overlay_canvas[0]);\n this.$canvas = $(new_canvas) as JQuery<HTMLCanvasElement>;\n this.ctx = null;\n this.ext = null;\n }\n\n private getWebGLCanvasContext() {\n try {\n const canvas = this.$canvas[0];\n const ctx =\n this.ctx ||\n (canvas.getContext('experimental-webgl', {\n alpha: false,\n antialias: true,\n }) as OncoprintWebGLContext);\n ctx.clearColor(1.0, 1.0, 1.0, 1.0);\n ctx.clear(ctx.COLOR_BUFFER_BIT | ctx.DEPTH_BUFFER_BIT);\n ctx.viewportWidth = canvas.width;\n ctx.viewportHeight = canvas.height;\n ctx.viewport(0, 0, ctx.viewportWidth, ctx.viewportHeight);\n ctx.enable(ctx.DEPTH_TEST);\n ctx.enable(ctx.BLEND);\n ctx.blendEquation(ctx.FUNC_ADD);\n ctx.blendFunc(ctx.SRC_ALPHA, ctx.ONE_MINUS_SRC_ALPHA);\n ctx.depthMask(false);\n\n return ctx;\n } catch (e) {\n return null;\n }\n }\n\n private ensureWebGLContext() {\n for (let i = 0; i < 5; i++) {\n if (!this.ctx || this.ctx.isContextLost()) {\n // have to get a new canvas when context is lost by browser\n this.getNewCanvas();\n this.ctx = this.getWebGLCanvasContext();\n this.setUpShaders();\n } else {\n break;\n }\n }\n if (!this.ctx || this.ctx.isContextLost()) {\n throw new Error(\n 'Unable to get WebGL context for Oncoprint Minimap'\n );\n }\n }\n\n private createShaderProgram(\n vertex_shader: WebGLShader,\n fragment_shader: WebGLShader\n ) {\n const program = this.ctx.createProgram();\n this.ctx.attachShader(program, vertex_shader);\n this.ctx.attachShader(program, fragment_shader);\n\n this.ctx.linkProgram(program);\n\n const success = this.ctx.getProgramParameter(\n program,\n this.ctx.LINK_STATUS\n );\n if (!success) {\n const msg = this.ctx.getProgramInfoLog(program);\n this.ctx.deleteProgram(program);\n throw 'Unable to link shader program: ' + msg;\n }\n\n return program;\n }\n\n private createShader(\n source: string,\n type: 'VERTEX_SHADER' | 'FRAGMENT_SHADER'\n ) {\n const shader = this.ctx.createShader(this.ctx[type]);\n this.ctx.shaderSource(shader, source);\n this.ctx.compileShader(shader);\n\n const success = this.ctx.getShaderParameter(\n shader,\n this.ctx.COMPILE_STATUS\n );\n if (!success) {\n const msg = this.ctx.getShaderInfoLog(shader);\n this.ctx.deleteShader(shader);\n throw 'Unable to compile shader: ' + msg;\n }\n\n return shader;\n }\n\n private getWebGLContextAndSetUpMatrices() {\n this.ctx = this.getWebGLCanvasContext();\n if (this.ctx) {\n this.ext = this.ctx.getExtension('ANGLE_instanced_arrays');\n }\n (function initializeMatrices(self) {\n const mvMatrix = gl_matrix.mat4.create();\n gl_matrix.mat4.lookAt(mvMatrix, [0, 0, 1], [0, 0, 0], [0, 1, 0]);\n self.mvMatrix = mvMatrix;\n\n const pMatrix = gl_matrix.mat4.create();\n gl_matrix.mat4.ortho(\n pMatrix,\n 0,\n self.ctx.viewportWidth,\n self.ctx.viewportHeight,\n 0,\n -5,\n 1000\n ); // y axis inverted so that y increases down like SVG\n self.pMatrix = pMatrix;\n })(this);\n }\n\n private setUpShaders() {\n const vertex_shader_source = [\n 'precision highp float;',\n 'attribute float aPosVertex;',\n 'attribute float aColVertex;',\n 'attribute float aVertexOncoprintColumn;',\n 'uniform float columnWidth;',\n 'uniform float zoomX;',\n 'uniform float zoomY;',\n 'uniform mat4 uMVMatrix;',\n 'uniform mat4 uPMatrix;',\n 'uniform float offsetY;',\n 'uniform float positionBitPackBase;',\n 'uniform float texSize;',\n 'varying float texCoord;',\n 'vec3 unpackVec3(float packedVec3, float base) {',\n '\tfloat pos0 = floor(packedVec3 / (base*base));',\n '\tfloat pos0Contr = pos0*base*base;',\n '\tfloat pos1 = floor((packedVec3 - pos0Contr)/base);',\n '\tfloat pos1Contr = pos1*base;',\n '\tfloat pos2 = packedVec3 - pos0Contr - pos1Contr;',\n '\treturn vec3(pos0, pos1, pos2);',\n '}',\n 'void main(void) {',\n '\tgl_Position = vec4(unpackVec3(aPosVertex, positionBitPackBase), 1.0);',\n '\tgl_Position[0] += aVertexOncoprintColumn*columnWidth;',\n '\tgl_Position[1] += offsetY;',\n '\tgl_Position *= vec4(zoomX, zoomY, 1.0, 1.0);',\n '\tgl_Position = uPMatrix * uMVMatrix * gl_Position;',\n '\ttexCoord = (aColVertex + 0.5) / texSize;',\n '}',\n ].join('\\n');\n const fragment_shader_source = [\n 'precision mediump float;',\n 'varying float texCoord;',\n 'uniform sampler2D uSampler;',\n 'void main(void) {',\n ' gl_FragColor = texture2D(uSampler, vec2(texCoord, 0.5));',\n '}',\n ].join('\\n');\n const vertex_shader = this.createShader(\n vertex_shader_source,\n 'VERTEX_SHADER'\n );\n const fragment_shader = this.createShader(\n fragment_shader_source,\n 'FRAGMENT_SHADER'\n );\n\n const shader_program = this.createShaderProgram(\n vertex_shader,\n fragment_shader\n ) as OncoprintShaderProgram;\n shader_program.vertexPositionAttribute = this.ctx.getAttribLocation(\n shader_program,\n 'aPosVertex'\n );\n this.ctx.enableVertexAttribArray(\n shader_program.vertexPositionAttribute\n );\n shader_program.vertexColorAttribute = this.ctx.getAttribLocation(\n shader_program,\n 'aColVertex'\n );\n this.ctx.enableVertexAttribArray(shader_program.vertexColorAttribute);\n shader_program.vertexOncoprintColumnAttribute = this.ctx.getAttribLocation(\n shader_program,\n 'aVertexOncoprintColumn'\n );\n this.ctx.enableVertexAttribArray(\n shader_program.vertexOncoprintColumnAttribute\n );\n\n shader_program.samplerUniform = this.ctx.getUniformLocation(\n shader_program,\n 'uSampler'\n );\n shader_program.pMatrixUniform = this.ctx.getUniformLocation(\n shader_program,\n 'uPMatrix'\n );\n shader_program.mvMatrixUniform = this.ctx.getUniformLocation(\n shader_program,\n 'uMVMatrix'\n );\n shader_program.columnWidthUniform = this.ctx.getUniformLocation(\n shader_program,\n 'columnWidth'\n );\n shader_program.zoomXUniform = this.ctx.getUniformLocation(\n shader_program,\n 'zoomX'\n );\n shader_program.zoomYUniform = this.ctx.getUniformLocation(\n shader_program,\n 'zoomY'\n );\n shader_program.offsetYUniform = this.ctx.getUniformLocation(\n shader_program,\n 'offsetY'\n );\n shader_program.positionBitPackBaseUniform = this.ctx.getUniformLocation(\n shader_program,\n 'positionBitPackBase'\n );\n shader_program.texSizeUniform = this.ctx.getUniformLocation(\n shader_program,\n 'texSize'\n );\n\n this.shader_program = shader_program;\n }\n\n private getTrackBuffers(\n cell_view: OncoprintWebGLCellView,\n track_id: TrackId\n ) {\n const pos_buffer = this.ctx.createBuffer() as OncoprintVertexTrackBuffer;\n const pos_array = cell_view.vertex_data[track_id].pos_array;\n const universal_shapes_start_index =\n cell_view.vertex_data[track_id].universal_shapes_start_index;\n\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, pos_buffer);\n this.ctx.bufferData(\n this.ctx.ARRAY_BUFFER,\n pos_array,\n this.ctx.STATIC_DRAW\n );\n pos_buffer.itemSize = 1;\n pos_buffer.specificShapesNumItems =\n universal_shapes_start_index / pos_buffer.itemSize;\n pos_buffer.universalShapesNumItems =\n (pos_array.length - universal_shapes_start_index) /\n pos_buffer.itemSize;\n\n const col_buffer = this.ctx.createBuffer() as OncoprintVertexTrackBuffer;\n const col_array = cell_view.vertex_data[track_id].col_array;\n\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, col_buffer);\n this.ctx.bufferData(\n this.ctx.ARRAY_BUFFER,\n col_array,\n this.ctx.STATIC_DRAW\n );\n col_buffer.itemSize = 1;\n col_buffer.specificShapesNumItems =\n universal_shapes_start_index / col_buffer.itemSize;\n col_buffer.universalShapesNumItems =\n (col_array.length - universal_shapes_start_index) /\n col_buffer.itemSize;\n\n const tex = this.ctx.createTexture();\n this.ctx.bindTexture(this.ctx.TEXTURE_2D, tex);\n\n const color_bank = cell_view.vertex_data[track_id].col_bank;\n const width = Math.pow(\n 2,\n Math.ceil((Math as any).log2(color_bank.length / 4))\n );\n while (color_bank.length < 4 * width) {\n color_bank.push(0);\n }\n const height = 1;\n this.ctx.texImage2D(\n this.ctx.TEXTURE_2D,\n 0,\n this.ctx.RGBA,\n width,\n height,\n 0,\n this.ctx.RGBA,\n this.ctx.UNSIGNED_BYTE,\n new Uint8Array(color_bank)\n );\n this.ctx.texParameteri(\n this.ctx.TEXTURE_2D,\n this.ctx.TEXTURE_MIN_FILTER,\n this.ctx.NEAREST\n );\n this.ctx.texParameteri(\n this.ctx.TEXTURE_2D,\n this.ctx.TEXTURE_MAG_FILTER,\n this.ctx.NEAREST\n );\n\n const color_texture = { texture: tex, size: width };\n\n const vertex_column_buffer = this.ctx.createBuffer() as OncoprintTrackBuffer;\n const vertex_column_array = cell_view.vertex_column_array[track_id];\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, vertex_column_buffer);\n this.ctx.bufferData(\n this.ctx.ARRAY_BUFFER,\n new Float32Array(vertex_column_array),\n this.ctx.STATIC_DRAW\n );\n vertex_column_buffer.itemSize = 1;\n vertex_column_buffer.numItems =\n vertex_column_array.length / vertex_column_buffer.itemSize;\n\n return {\n position: pos_buffer,\n color: col_buffer,\n color_tex: color_texture,\n column: vertex_column_buffer,\n };\n }\n\n private getSimpleCountBuffer(model: OncoprintModel) {\n const numColumns = model.getIdOrder().length;\n const buffer = this.ctx.createBuffer() as OncoprintTrackBuffer;\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, buffer);\n this.ctx.bufferData(\n this.ctx.ARRAY_BUFFER,\n new Float32Array(_.range(0, numColumns)),\n this.ctx.STATIC_DRAW\n );\n buffer.itemSize = 1;\n buffer.numItems = numColumns;\n return buffer;\n }\n\n private drawOncoprint(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n if (!this.shouldRender) {\n return;\n }\n\n this.ensureWebGLContext();\n\n const zoom = this.getZoom(model);\n\n this.ctx.clearColor(1.0, 1.0, 1.0, 1.0);\n this.ctx.clear(this.ctx.COLOR_BUFFER_BIT | this.ctx.DEPTH_BUFFER_BIT);\n\n const tracks = model.getTracks();\n const simple_count_buffer = this.getSimpleCountBuffer(model);\n for (let i = 0; i < tracks.length; i++) {\n const track_id = tracks[i];\n const cell_top = model.getCellTops(track_id, true);\n const buffers = this.getTrackBuffers(cell_view, track_id);\n if (buffers.position.numItems === 0) {\n continue;\n }\n\n for (const forSpecificShapes of [false, true]) {\n const shader_program = this.shader_program;\n this.ctx.useProgram(shader_program);\n\n if (forSpecificShapes) {\n this.ctx.bindBuffer(\n this.ctx.ARRAY_BUFFER,\n buffers.position\n );\n this.ctx.vertexAttribPointer(\n shader_program.vertexPositionAttribute,\n buffers.position.itemSize,\n this.ctx.FLOAT,\n false,\n 0,\n 0\n );\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, buffers.color);\n this.ctx.vertexAttribPointer(\n shader_program.vertexColorAttribute,\n buffers.color.itemSize,\n this.ctx.FLOAT,\n false,\n 0,\n 0\n );\n\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, buffers.column);\n this.ctx.vertexAttribPointer(\n shader_program.vertexOncoprintColumnAttribute,\n buffers.column.itemSize,\n this.ctx.FLOAT,\n false,\n 0,\n 0\n );\n // make sure to set divisor 0, otherwise the track will only use the first item in the column buffer\n this.ext.vertexAttribDivisorANGLE(\n shader_program.vertexOncoprintColumnAttribute,\n 0\n );\n } else {\n // set up for drawArraysInstanced\n const universalShapesStart =\n buffers.position.specificShapesNumItems *\n buffers.position.itemSize;\n this.ctx.bindBuffer(\n this.ctx.ARRAY_BUFFER,\n buffers.position\n );\n this.ctx.vertexAttribPointer(\n shader_program.vertexPositionAttribute,\n buffers.position.itemSize,\n this.ctx.FLOAT,\n false,\n 0,\n 4 * universalShapesStart\n );\n\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, buffers.color);\n this.ctx.vertexAttribPointer(\n shader_program.vertexColorAttribute,\n buffers.color.itemSize,\n this.ctx.FLOAT,\n false,\n 0,\n 4 * universalShapesStart\n );\n\n this.ctx.bindBuffer(\n this.ctx.ARRAY_BUFFER,\n simple_count_buffer\n );\n this.ctx.vertexAttribPointer(\n shader_program.vertexOncoprintColumnAttribute,\n 1,\n this.ctx.FLOAT,\n false,\n 0,\n 0\n );\n this.ext.vertexAttribDivisorANGLE(\n shader_program.vertexOncoprintColumnAttribute,\n 1\n );\n }\n\n this.ctx.activeTexture(this.ctx.TEXTURE0);\n this.ctx.bindTexture(\n this.ctx.TEXTURE_2D,\n buffers.color_tex.texture\n );\n this.ctx.uniform1i(this.shader_program.samplerUniform, 0);\n this.ctx.uniform1f(\n this.shader_program.texSizeUniform,\n buffers.color_tex.size\n );\n\n this.ctx.uniformMatrix4fv(\n this.shader_program.pMatrixUniform,\n false,\n this.pMatrix\n );\n this.ctx.uniformMatrix4fv(\n this.shader_program.mvMatrixUniform,\n false,\n this.mvMatrix\n );\n this.ctx.uniform1f(\n this.shader_program.columnWidthUniform,\n model.getCellWidth(true)\n );\n this.ctx.uniform1f(this.shader_program.zoomXUniform, zoom.x);\n this.ctx.uniform1f(this.shader_program.zoomYUniform, zoom.y);\n this.ctx.uniform1f(\n this.shader_program.offsetYUniform,\n cell_top\n );\n this.ctx.uniform1f(\n this.shader_program.positionBitPackBaseUniform,\n cell_view.position_bit_pack_base\n );\n\n if (forSpecificShapes) {\n this.ctx.drawArrays(\n this.ctx.TRIANGLES,\n 0,\n buffers.position.specificShapesNumItems\n );\n } else {\n this.ext.drawArraysInstancedANGLE(\n this.ctx.TRIANGLES,\n 0,\n buffers.position.itemSize *\n buffers.position.universalShapesNumItems,\n simple_count_buffer.numItems\n );\n }\n }\n this.ctx.flush();\n }\n }\n\n private getZoom(model: OncoprintModel) {\n let zoom_x =\n parseInt(this.$canvas[0].width as any, 10) /\n model.getOncoprintWidthNoColumnPaddingNoGaps();\n let zoom_y =\n parseInt(this.$canvas[0].height as any, 10) /\n model.getOncoprintHeight(true);\n zoom_x = Math.max(0, Math.min(1, zoom_x));\n zoom_y = Math.max(0, Math.min(1, zoom_y));\n return {\n x: zoom_x,\n y: zoom_y,\n };\n }\n\n private drawOverlayRect(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView,\n opt_rect?: OverlayRectSpec\n ) {\n if (!this.shouldRender) {\n return;\n }\n\n let left, width, top, height, left_col, right_col;\n if (opt_rect) {\n left = opt_rect.left;\n width = opt_rect.width;\n top = opt_rect.top;\n height = opt_rect.height;\n left_col = opt_rect.left_col;\n right_col = opt_rect.right_col;\n } else {\n const cell_width = model.getCellWidth(true);\n const cell_padding = model.getCellPadding(true);\n const viewport = cell_view.getViewportOncoprintSpace(model);\n\n const zoom = this.getZoom(model);\n left_col = model.getClosestColumnIndexToLeft(viewport.left, false);\n right_col = model.getClosestColumnIndexToLeft(\n viewport.right,\n false,\n true\n );\n left = left_col * cell_width * zoom.x;\n width = (right_col - left_col) * cell_width * zoom.x;\n top = viewport.top * zoom.y;\n height = (viewport.bottom - viewport.top) * zoom.y;\n }\n\n const ctx = this.overlay_ctx;\n const canv = this.$overlay_canvas[0];\n const canv_width = parseInt(canv.width as any, 10);\n const canv_height = parseInt(canv.height as any, 10);\n\n // Clear\n ctx.fillStyle = 'rgba(0,0,0,0)';\n ctx.clearRect(0, 0, canv_width, canv_height);\n // Draw rectangle\n ctx.fillStyle = 'rgba(255,255,255,0.4)';\n ctx.fillRect(left, top, width, height);\n // Draw border line by line\n const unhover_color = 'rgba(0,0,0,0.75)';\n const hover_color = 'rgba(255,0,0,1)';\n const unhover_width = 1;\n const hover_width = 2;\n const top_is_hovered =\n this.resize_hover === 't' ||\n this.resize_hover === 'tr' ||\n this.resize_hover === 'tl';\n const right_is_hovered =\n this.resize_hover === 'r' ||\n this.resize_hover === 'tr' ||\n this.resize_hover === 'br';\n const bottom_is_hovered =\n this.resize_hover === 'b' ||\n this.resize_hover === 'br' ||\n this.resize_hover === 'bl';\n const left_is_hovered =\n this.resize_hover === 'l' ||\n this.resize_hover === 'tl' ||\n this.resize_hover === 'bl';\n // Draw top border\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.strokeStyle = top_is_hovered ? hover_color : unhover_color;\n ctx.lineWidth = top_is_hovered ? hover_width : unhover_width;\n ctx.lineTo(left + width, top);\n ctx.stroke();\n // Draw right border\n ctx.beginPath();\n ctx.moveTo(left + width, top);\n ctx.strokeStyle = right_is_hovered ? hover_color : unhover_color;\n ctx.lineWidth = right_is_hovered ? hover_width : unhover_width;\n ctx.lineTo(left + width, top + height);\n ctx.stroke();\n // Draw bottom border\n ctx.beginPath();\n ctx.moveTo(left + width, top + height);\n ctx.strokeStyle = bottom_is_hovered ? hover_color : unhover_color;\n ctx.lineWidth = bottom_is_hovered ? hover_width : unhover_width;\n ctx.lineTo(left, top + height);\n ctx.stroke();\n // Draw left border\n ctx.beginPath();\n ctx.moveTo(left, top + height);\n ctx.strokeStyle = left_is_hovered ? hover_color : unhover_color;\n ctx.lineWidth = left_is_hovered ? hover_width : unhover_width;\n ctx.lineTo(left, top);\n ctx.stroke();\n\n this.current_rect.setParams({\n top: top,\n left_col: left_col,\n right_col: right_col,\n height: height,\n });\n }\n\n private drawOncoprintAndOverlayRect(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n if (!this.shouldRender) {\n return;\n }\n this.drawOncoprint(model, cell_view);\n this.drawOverlayRect(model, cell_view);\n }\n\n // API BEGINS HERE\n\n public moveTrack(model: OncoprintModel, cell_view: OncoprintWebGLCellView) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n public addTracks(model: OncoprintModel, cell_view: OncoprintWebGLCellView) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n public removeTrack(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n public setHorzZoom(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOverlayRect(model, cell_view);\n this.horizontal_zoom.setSliderValue(model.getHorzZoom());\n }\n public setVertZoom(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOverlayRect(model, cell_view);\n this.vertical_zoom.setSliderValue(model.getVertZoom());\n }\n public setZoom(model: OncoprintModel, cell_view: OncoprintWebGLCellView) {\n this.drawOverlayRect(model, cell_view);\n this.horizontal_zoom.setSliderValue(model.getHorzZoom());\n this.vertical_zoom.setSliderValue(model.getVertZoom());\n }\n public setScroll(model: OncoprintModel, cell_view: OncoprintWebGLCellView) {\n this.drawOverlayRect(model, cell_view);\n }\n public setHorzScroll(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOverlayRect(model, cell_view);\n }\n public setVertScroll(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOverlayRect(model, cell_view);\n }\n public setViewport(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOverlayRect(model, cell_view);\n this.horizontal_zoom.setSliderValue(model.getHorzZoom());\n this.vertical_zoom.setSliderValue(model.getVertZoom());\n }\n public sort(model: OncoprintModel, cell_view: OncoprintWebGLCellView) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n public setTrackData(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n public shareRuleSet(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n public setRuleSet(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n public setIdOrder(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n public setTrackGroupHeader(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n public suppressRendering() {\n this.rendering_suppressed = true;\n }\n public releaseRendering(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.rendering_suppressed = false;\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n public hideIds(model: OncoprintModel, cell_view: OncoprintWebGLCellView) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n\n public setMinimapVisible(\n visible: boolean,\n model?: OncoprintModel,\n cell_view?: OncoprintWebGLCellView\n ) {\n this.visible = visible;\n\n if (this.visible && model && cell_view) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n }\n\n public setWindowPosition(x: number, y: number) {\n this.$div.css({ top: y, left: x });\n }\n\n public setWidth(\n w: number,\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.$canvas[0].width = w;\n this.$overlay_canvas[0].width = w;\n this.getWebGLContextAndSetUpMatrices();\n this.setUpShaders();\n this.overlay_ctx = this.$overlay_canvas[0].getContext('2d');\n\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n}\n","import './polyfill';\n\nimport OncoprintModel, {\n ColumnId,\n ColumnLabel,\n ColumnProp,\n CustomTrackOption,\n Datum,\n LibraryTrackSpec,\n SortConfig,\n TrackGroup,\n TrackGroupHeader,\n TrackGroupIndex,\n TrackId,\n TrackSortDirection,\n TrackSortSpecification,\n TrackTooltipFn,\n UserTrackSpec,\n} from './oncoprintmodel';\nimport OncoprintWebGLCellView from './oncoprintwebglcellview';\nimport OncoprintLabelView from './oncoprintlabelview';\nimport OncoprintRuleSet, { RuleSetParams } from './oncoprintruleset';\nimport OncoprintTrackOptionsView from './oncoprinttrackoptionsview';\nimport OncoprintLegendView from './oncoprintlegendrenderer';\nimport OncoprintToolTip from './oncoprinttooltip';\nimport OncoprintTrackInfoView from './oncoprinttrackinfoview';\nimport OncoprintMinimapView, {\n MinimapViewportSpec,\n} from './oncoprintminimapview';\n\nimport svgfactory from './svgfactory';\n\nimport $ from 'jquery';\nimport { clamp } from './utils';\nimport OncoprintHeaderView from './oncoprintheaderview';\n\nexport type InitParams = {\n init_cell_width?: number;\n init_cell_padding?: number;\n cell_padding_off_cell_width_threshold?: number;\n init_horz_zoom?: number;\n init_vert_zoom?: number;\n init_track_group_padding?: number;\n init_cell_padding_on?: boolean;\n max_height?: number;\n};\n\nexport type HorzZoomCallback = (zoom: number) => void;\nexport type MinimapCloseCallback = () => void;\nexport type CellMouseOverCallback = (\n uid: ColumnId | null,\n track_id?: TrackId\n) => void;\nexport type CellClickCallback = (\n uid: ColumnId | null,\n track_id?: TrackId\n) => void;\nexport type ClipboardChangeCallback = (ids: ColumnId[]) => void;\n\nconst nextTrackId = (function() {\n let ctr = 0;\n return function() {\n ctr += 1;\n return ctr;\n };\n})();\n\nexport default class Oncoprint {\n // this is the controller\n\n private lastSortId = 0;\n private incrementLastSortId() {\n this.lastSortId = (this.lastSortId + 1) % 1000000; // make sure we don't have any overflow problems. Definitely won't have a million sorts pending at once\n }\n\n public destroyed: boolean;\n public webgl_unavailable: boolean;\n private $ctr: JQuery;\n private $oncoprint_ctr: JQuery;\n private $cell_div: JQuery;\n private $header_div: JQuery;\n private $legend_div: JQuery;\n private $track_options_div: JQuery;\n private $track_info_div: JQuery;\n private $dummy_scroll_div: JQuery;\n private $minimap_div: JQuery;\n private $cell_canvas: JQuery;\n private $cell_overlay_canvas: JQuery;\n\n public model: OncoprintModel;\n public header_view: OncoprintHeaderView;\n public cell_view: OncoprintWebGLCellView;\n public minimap_view: OncoprintMinimapView;\n public track_options_view: OncoprintTrackOptionsView;\n public track_info_view: OncoprintTrackInfoView;\n public label_view: OncoprintLabelView;\n public legend_view: OncoprintLegendView;\n\n private keep_horz_zoomed_to_fit: boolean;\n private keep_horz_zoomed_to_fit_ids: ColumnId[];\n private pending_resize_and_organize: boolean;\n\n private horz_zoom_callbacks: HorzZoomCallback[];\n private minimap_close_callbacks: MinimapCloseCallback[];\n private cell_mouse_over_callbacks: CellMouseOverCallback[];\n private cell_click_callbacks: CellClickCallback[];\n private id_clipboard: ColumnId[];\n private clipboard_change_callbacks: ClipboardChangeCallback[];\n\n private target_dummy_scroll_left: number;\n private target_dummy_scroll_top: number;\n\n private getCellViewHeight = () =>\n this.cell_view.getVisibleAreaHeight(this.model);\n\n constructor(\n private ctr_selector: string,\n private width: number,\n params?: InitParams\n ) {\n params = params || {};\n\n const self = this;\n\n this.destroyed = false;\n this.webgl_unavailable =\n document\n .createElement('canvas')\n .getContext('experimental-webgl') === null;\n if (this.webgl_unavailable) {\n $(ctr_selector).append(\n \"<p class='oncoprintjs__webgl_unavailable_message'>WebGL context cannot be retrieved, so oncoprint cannot be used. Please visit <a href='http://webglreport.com'>WebGL Report</a> to explore your browsers WebGL capabilities.</p>\"\n );\n return;\n }\n\n const $ctr = $('<span></span>')\n .css({ position: 'relative', display: 'inline-block' })\n .appendTo(ctr_selector);\n const $oncoprint_ctr = $('<div></div>')\n .css({ position: 'absolute', display: 'inline-block' })\n .appendTo($ctr);\n\n const $tooltip_ctr = $('<span></span>')\n .css({ position: 'fixed', top: 0, left: 0, 'z-index': 99999 })\n .appendTo(ctr_selector);\n const $legend_ctr = $('<div></div>')\n .css({\n position: 'absolute',\n display: 'inline-block',\n top: 0,\n left: 0,\n 'min-height': 1,\n })\n .appendTo($ctr);\n\n const $label_canvas = $('<canvas></canvas>')\n .css({\n display: 'inline-block',\n position: 'absolute',\n left: '0px',\n top: '0px',\n })\n .addClass('noselect')\n .attr({ width: '150', height: '250' }) as JQuery<HTMLCanvasElement>;\n\n const $header_div = $('<div></div>')\n .css({ position: 'absolute' })\n .addClass('oncoprintjs__header_div');\n\n const $track_options_div = $('<div></div>')\n .css({ position: 'absolute', left: '150px', top: '0px' })\n .addClass('noselect')\n .attr({ width: '50', height: '250' });\n\n const $legend_div = $('<div></div>')\n .css({ position: 'absolute', top: '250px', 'min-height': 1 })\n .addClass('noselect oncoprint-legend-div');\n\n const $cell_div = $('<div>')\n .css({\n width: width,\n display: 'inline-block',\n position: 'absolute',\n left: '200px',\n top: '0px',\n })\n .addClass('noselect');\n\n const $cell_canvas = $('<canvas></canvas>')\n .attr({ width: '0px', height: '0px' })\n .css({ position: 'absolute', top: '0px', left: '0px' })\n .addClass('noselect') as JQuery<HTMLCanvasElement>;\n\n const $dummy_scroll_div = $('<div>')\n .css({\n position: 'absolute',\n 'overflow-x': 'scroll',\n 'overflow-y': 'scroll',\n top: '0',\n left: '0px',\n height: '1px',\n })\n .addClass('oncoprintjs__scroll_div');\n\n const $dummy_scroll_div_contents = $('<div>').appendTo(\n $dummy_scroll_div\n );\n\n const $cell_overlay_canvas = $('<canvas></canvas>')\n .attr({ width: '0px', height: '0px' })\n .css({ position: 'absolute', top: '0px', left: '0px' })\n .addClass('noselect')\n .addClass('oncoprintjs__cell_overlay_div') as JQuery<\n HTMLCanvasElement\n >;\n\n const $column_label_canvas = $('<canvas></canvas>')\n .attr({ width: '0px', height: '0px' })\n .css({\n position: 'absolute',\n top: '0px',\n left: '0px',\n 'pointer-events': 'none', // since column label canvas is on top of cell overlay canvas, we need to make it not capture any mouse events\n })\n .addClass('noselect')\n .addClass('oncoprintjs__column_label_canvas') as JQuery<\n HTMLCanvasElement\n >;\n\n const $track_info_div = $('<div>').css({ position: 'absolute' });\n\n const $minimap_div = $('<div>')\n .css({\n position: 'absolute',\n outline: 'solid 1px black',\n display: 'none',\n })\n .addClass('noselect');\n\n const $minimap_canvas = $('<canvas></canvas>')\n .attr('width', 300)\n .attr('height', 300)\n .css({\n position: 'absolute',\n top: '0px',\n left: '0px',\n 'z-index': 0,\n })\n .addClass('noselect') as JQuery<HTMLCanvasElement>;\n const $minimap_overlay_canvas = $('<canvas></canvas>')\n .attr('width', 300)\n .attr('height', 300)\n .css({\n position: 'absolute',\n top: '0px',\n left: '0px',\n 'z-index': 1,\n })\n .addClass('noselect') as JQuery<HTMLCanvasElement>;\n\n $label_canvas.appendTo($oncoprint_ctr);\n $cell_div.appendTo($oncoprint_ctr);\n $track_options_div.appendTo($oncoprint_ctr);\n $track_info_div.appendTo($oncoprint_ctr);\n $header_div.appendTo($oncoprint_ctr); // this needs to go at the end because otherwise canvases cover it up\n\n $legend_div.appendTo($legend_ctr);\n\n $minimap_div.appendTo($ctr);\n\n $cell_canvas.appendTo($cell_div);\n $cell_overlay_canvas.appendTo($cell_div);\n $column_label_canvas.appendTo($cell_div); // column labels should show above the overlay canvas because the text should show over the highlights\n $dummy_scroll_div.appendTo($cell_div);\n $dummy_scroll_div.on('mousemove mousedown mouseup', function(evt) {\n $cell_overlay_canvas.trigger(evt);\n });\n $minimap_canvas.appendTo($minimap_div);\n $minimap_overlay_canvas.appendTo($minimap_div);\n\n this.$ctr = $ctr;\n this.$oncoprint_ctr = $oncoprint_ctr;\n this.$header_div = $header_div;\n this.$cell_div = $cell_div;\n this.$legend_div = $legend_div;\n this.$track_options_div = $track_options_div;\n this.$track_info_div = $track_info_div;\n this.$dummy_scroll_div = $dummy_scroll_div;\n this.$minimap_div = $minimap_div;\n\n this.$cell_canvas = $cell_canvas;\n this.$cell_overlay_canvas = $cell_overlay_canvas;\n\n this.model = new OncoprintModel(params);\n\n this.header_view = new OncoprintHeaderView(this.$header_div);\n\n this.cell_view = new OncoprintWebGLCellView(\n $cell_div,\n $cell_canvas,\n $cell_overlay_canvas,\n $column_label_canvas,\n $dummy_scroll_div_contents,\n this.model,\n new OncoprintToolTip($tooltip_ctr),\n function(left, right) {\n const enclosed_ids = self.model.getIdsInZoomedLeftInterval(\n left,\n right\n );\n self.setHorzZoom(\n self.model.getHorzZoomToFit(\n self.cell_view.getVisibleAreaWidth(),\n enclosed_ids\n )\n );\n self.$dummy_scroll_div.scrollLeft(\n self.model.getZoomedColumnLeft(enclosed_ids[0])\n );\n },\n function(uid, track_id) {\n self.doCellMouseOver(uid, track_id);\n },\n function(uid, track_id) {\n self.doCellClick(uid, track_id);\n }\n );\n\n this.minimap_view = new OncoprintMinimapView(\n $minimap_div,\n $minimap_canvas,\n $minimap_overlay_canvas,\n this.model,\n this.cell_view,\n 150,\n 150,\n function(x, y) {\n self.setScroll(x, y);\n },\n function(vp: MinimapViewportSpec) {\n self.setViewport(vp);\n },\n function(val: number) {\n self.setHorzZoomCentered(val);\n },\n function(val: number) {\n // Save unzoomed vertical center pre-zoom\n const prev_viewport = self.cell_view.getViewportOncoprintSpace(\n self.model\n );\n const center_onc_space =\n (prev_viewport.top + prev_viewport.bottom) / 2;\n\n // Execute zoom\n self.setVertZoom(val);\n\n // Set scroll to recenter the vertical center\n const viewport = self.cell_view.getViewportOncoprintSpace(\n self.model\n );\n const half_viewport_height_zoomed =\n (self.model.getVertZoom() *\n (viewport.bottom - viewport.top)) /\n 2;\n\n self.setVertScroll(\n center_onc_space * self.model.getVertZoom() -\n half_viewport_height_zoomed\n );\n },\n function() {\n self.updateHorzZoomToFit();\n const left = self.model.getZoomedColumnLeft();\n self.setHorzScroll(\n Math.min.apply(\n null,\n self.keep_horz_zoomed_to_fit_ids.map(function(id) {\n return left[id];\n })\n )\n );\n },\n function() {\n self.setMinimapVisible(false);\n }\n );\n\n this.track_options_view = new OncoprintTrackOptionsView(\n $track_options_div,\n function(track_id: TrackId) {\n // move up\n const tracks = self.model.getContainingTrackGroup(track_id);\n const index = tracks.indexOf(track_id);\n if (index > 0) {\n let new_previous_track = null;\n if (index >= 2) {\n new_previous_track = tracks[index - 2];\n }\n self.moveTrack(track_id, new_previous_track);\n }\n },\n function(track_id: TrackId) {\n // move down\n const tracks = self.model.getContainingTrackGroup(track_id);\n const index = tracks.indexOf(track_id);\n if (index < tracks.length - 1) {\n self.moveTrack(track_id, tracks[index + 1]);\n }\n },\n function(track_id: TrackId) {\n const callback = self.model.getTrackRemoveOptionCallback(\n track_id\n );\n if (callback) {\n callback(track_id);\n } else {\n self.removeTrack(track_id);\n }\n },\n function(track_id, dir) {\n self.setTrackSortDirection(track_id, dir);\n },\n function(track_id: TrackId) {\n self.removeExpansionTracksFor(track_id);\n },\n self.setTrackShowGaps.bind(self)\n );\n this.track_info_view = new OncoprintTrackInfoView(\n $track_info_div,\n new OncoprintToolTip($tooltip_ctr)\n );\n\n //this.track_info_view = new OncoprintTrackInfoView($track_info_div);\n\n this.label_view = new OncoprintLabelView(\n $label_canvas,\n this.model,\n new OncoprintToolTip($tooltip_ctr, { noselect: true })\n );\n this.label_view.setDragCallback(function(\n target_track,\n new_previous_track\n ) {\n self.moveTrack(target_track, new_previous_track);\n });\n\n this.legend_view = new OncoprintLegendView($legend_div, 10, 20);\n\n this.keep_horz_zoomed_to_fit = false;\n this.keep_horz_zoomed_to_fit_ids = [];\n\n // We need to handle scrolling this way because for some reason huge\n // canvas elements have terrible resolution.\n\n this.target_dummy_scroll_left = 0;\n this.target_dummy_scroll_top = 0;\n\n (function setUpOncoprintScroll(oncoprint) {\n $dummy_scroll_div.scroll(function(e) {\n const dummy_scroll_left = $dummy_scroll_div.scrollLeft();\n const dummy_scroll_top = $dummy_scroll_div.scrollTop();\n if (\n dummy_scroll_left !== self.target_dummy_scroll_left ||\n dummy_scroll_top !== self.target_dummy_scroll_top\n ) {\n // In setDummyScrollDivScroll, where we intend to set the scroll programmatically without\n //\ttriggering the handler, we set target_dummy_scroll_left and target_dummy_scroll_top,\n //\tso if they're not set (we get inside this block), then it's a user-triggered scroll.\n //\n // Set oncoprint scroll to match\n self.target_dummy_scroll_left = dummy_scroll_left;\n self.target_dummy_scroll_top = dummy_scroll_top;\n const maximum_dummy_scroll_div_scroll = oncoprint.maxDummyScrollDivScroll();\n const maximum_div_scroll_left =\n maximum_dummy_scroll_div_scroll.left;\n const maximum_div_scroll_top =\n maximum_dummy_scroll_div_scroll.top;\n let scroll_left_prop =\n maximum_div_scroll_left > 0\n ? dummy_scroll_left / maximum_div_scroll_left\n : 0;\n let scroll_top_prop =\n maximum_div_scroll_top > 0\n ? dummy_scroll_top / maximum_div_scroll_top\n : 0;\n scroll_left_prop = clamp(scroll_left_prop, 0, 1);\n scroll_top_prop = clamp(scroll_top_prop, 0, 1);\n const maximum_scroll_left = oncoprint.maxOncoprintScrollLeft();\n const maximum_scroll_top = oncoprint.maxOncoprintScrollTop();\n const scroll_left = Math.round(\n maximum_scroll_left * scroll_left_prop\n );\n const scroll_top = Math.round(\n maximum_scroll_top * scroll_top_prop\n );\n self.keep_horz_zoomed_to_fit = false;\n\n oncoprint.doSetScroll(scroll_left, scroll_top);\n }\n });\n })(self);\n\n this.horz_zoom_callbacks = [];\n this.minimap_close_callbacks = [];\n this.cell_mouse_over_callbacks = [];\n this.cell_click_callbacks = [];\n\n this.id_clipboard = [];\n this.clipboard_change_callbacks = [];\n\n this.pending_resize_and_organize = false;\n }\n\n private _SetLegendTop() {\n if (this.model.rendering_suppressed_depth > 0) {\n return;\n }\n this.$legend_div.css({\n top: this.cell_view.getVisibleAreaHeight(this.model) + 30,\n });\n }\n private setLegendTopAfterTimeout() {\n if (this.model.rendering_suppressed_depth > 0) {\n return;\n }\n const self = this;\n setTimeout(function() {\n self.setHeight();\n self._SetLegendTop();\n }, 0);\n }\n\n private setHeight() {\n this.$ctr.css({\n 'min-height':\n this.cell_view.getVisibleAreaHeight(this.model) +\n Math.max(\n this.$legend_div.outerHeight(),\n this.$minimap_div.is(':visible')\n ? this.$minimap_div.outerHeight()\n : 0\n ) +\n 30,\n });\n }\n\n private resizeAndOrganize(onComplete?: () => void) {\n if (this.model.rendering_suppressed_depth > 0) {\n return;\n }\n const ctr_width = $(this.ctr_selector).width();\n if (ctr_width === 0) {\n // dont make any adjustments while oncoprint is offscreen, DOM size calculations would be messed up\n this.pending_resize_and_organize = true;\n return;\n }\n this.$track_options_div.css({ left: this.label_view.getWidth() });\n this.$header_div.css({\n left: 0,\n top: 0,\n width: this.width,\n height: this.cell_view.getVisibleAreaHeight(this.model),\n });\n this.$track_info_div.css({\n left:\n this.label_view.getWidth() + this.track_options_view.getWidth(),\n });\n const cell_div_left =\n this.label_view.getWidth() +\n this.track_options_view.getWidth() +\n this.track_info_view.getWidth();\n this.$cell_div.css('left', cell_div_left);\n this.cell_view.setWidth(this.width - cell_div_left - 20, this.model);\n\n this._SetLegendTop();\n this.legend_view.setWidth(\n this.width - this.$minimap_div.outerWidth() - 20,\n this.model\n );\n\n this.setHeight();\n this.$ctr.css({ 'min-width': this.width });\n\n const self = this;\n setTimeout(function() {\n if (self.keep_horz_zoomed_to_fit) {\n self.updateHorzZoomToFit();\n }\n onComplete && onComplete();\n }, 0);\n }\n\n private resizeAndOrganizeAfterTimeout(onComplete?: () => void) {\n if (this.model.rendering_suppressed_depth > 0) {\n return;\n }\n const self = this;\n setTimeout(function() {\n self.resizeAndOrganize(onComplete);\n }, 0);\n }\n\n private maxOncoprintScrollLeft() {\n return Math.max(\n 0,\n this.cell_view.getTotalWidth(this.model) -\n this.cell_view.getVisibleAreaWidth()\n );\n }\n\n private maxOncoprintScrollTop() {\n return Math.max(\n 0,\n this.cell_view.getTotalHeight(this.model) -\n this.cell_view.getVisibleAreaHeight(this.model)\n );\n }\n\n private maxDummyScrollDivScroll() {\n const dummy_scroll_div_client_size = this.cell_view.getDummyScrollDivClientSize();\n const maximum_div_scroll_left = Math.max(\n 0,\n this.$dummy_scroll_div[0].scrollWidth -\n dummy_scroll_div_client_size.width\n );\n const maximum_div_scroll_top = Math.max(\n 0,\n this.$dummy_scroll_div[0].scrollHeight -\n dummy_scroll_div_client_size.height\n );\n return { left: maximum_div_scroll_left, top: maximum_div_scroll_top };\n }\n\n public setMinimapVisible(visible: boolean) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n if (visible) {\n this.$minimap_div.css({\n display: 'block',\n top: 0,\n left:\n $(this.ctr_selector).width() -\n this.$minimap_div.outerWidth() -\n 10,\n });\n this.minimap_view.setMinimapVisible(\n true,\n this.model,\n this.cell_view\n );\n } else {\n this.$minimap_div.css('display', 'none');\n this.minimap_view.setMinimapVisible(false);\n this.executeMinimapCloseCallbacks();\n }\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public scrollTo(left: number) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.$dummy_scroll_div.scrollLeft(left);\n }\n public onHorzZoom(callback: HorzZoomCallback) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.horz_zoom_callbacks.push(callback);\n }\n public onMinimapClose(callback: MinimapCloseCallback) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.minimap_close_callbacks.push(callback);\n }\n\n // methods that propagate/delegate to views\n public moveTrack(target_track: TrackId, new_previous_track: TrackId) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.moveTrack(target_track, new_previous_track);\n this.cell_view.moveTrack(this.model);\n this.header_view.render(this.model);\n this.label_view.moveTrack(this.model, this.getCellViewHeight);\n this.track_options_view.moveTrack(this.model, this.getCellViewHeight);\n this.track_info_view.moveTrack(this.model, this.getCellViewHeight);\n this.minimap_view.moveTrack(this.model, this.cell_view);\n\n if (\n this.model.keep_sorted &&\n this.model.isSortAffected(\n [target_track, new_previous_track],\n 'track'\n )\n ) {\n this.sort();\n }\n\n this.resizeAndOrganizeAfterTimeout();\n }\n public setTrackGroupOrder(\n index: TrackGroupIndex,\n track_order: TrackId[],\n dont_sort?: boolean\n ) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setTrackGroupOrder(index, track_order);\n this.cell_view.setTrackGroupOrder(this.model);\n this.header_view.render(this.model);\n this.label_view.setTrackGroupOrder(this.model, this.getCellViewHeight);\n this.track_options_view.setTrackGroupOrder(this.model);\n this.track_info_view.setTrackGroupOrder(\n this.model,\n this.getCellViewHeight\n );\n\n if (\n !dont_sort &&\n this.model.keep_sorted &&\n this.model.isSortAffected(index, 'group')\n ) {\n this.sort();\n }\n\n this.resizeAndOrganizeAfterTimeout();\n }\n public setTrackGroupLegendOrder(group_order: TrackGroupIndex[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setTrackGroupLegendOrder(group_order);\n this.legend_view.setTrackGroupLegendOrder(this.model);\n\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public keepSorted(keep_sorted?: boolean) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n const oldValue = this.model.keep_sorted;\n this.model.keep_sorted =\n typeof keep_sorted === 'undefined' ? true : keep_sorted;\n if (this.model.keep_sorted && this.model.keep_sorted !== oldValue) {\n this.sort();\n }\n }\n\n public addTracks(params_list: UserTrackSpec<Datum>[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return [];\n }\n // Update model\n const track_ids: TrackId[] = [];\n const library_params_list = (params_list as LibraryTrackSpec<\n Datum\n >[]).map(function(o) {\n o.track_id = nextTrackId();\n o.rule_set = OncoprintRuleSet(o.rule_set_params);\n track_ids.push(o.track_id);\n return o;\n });\n\n this.model.addTracks(library_params_list);\n // Update views\n this.cell_view.addTracks(this.model, track_ids);\n this.label_view.addTracks(\n this.model,\n track_ids,\n this.getCellViewHeight\n );\n this.header_view.render(this.model);\n this.track_options_view.addTracks(this.model, this.getCellViewHeight);\n this.track_info_view.addTracks(this.model, this.getCellViewHeight);\n this.legend_view.addTracks(this.model);\n this.minimap_view.addTracks(this.model, this.cell_view);\n\n if (\n this.model.keep_sorted &&\n this.model.isSortAffected(track_ids, 'track')\n ) {\n this.sort();\n }\n this.resizeAndOrganizeAfterTimeout();\n return track_ids;\n }\n\n public removeTrack(track_id: TrackId) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n // Update model\n this.model.removeTrack(track_id);\n // Update views\n this.cell_view.removeTrack(this.model, track_id);\n this.header_view.render(this.model);\n this.label_view.removeTrack(this.model, this.getCellViewHeight);\n this.track_options_view.removeTrack(\n this.model,\n track_id,\n this.getCellViewHeight\n );\n this.track_info_view.removeTrack(this.model, this.getCellViewHeight);\n this.legend_view.removeTrack(this.model);\n this.minimap_view.removeTrack(this.model, this.cell_view);\n\n if (\n this.model.keep_sorted &&\n this.model.isSortAffected(track_id, 'track')\n ) {\n this.sort();\n }\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public removeTracks(track_ids: TrackId[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n for (let i = 0; i < track_ids.length; i++) {\n this.removeTrack(track_ids[i]);\n }\n }\n\n public getTracks() {\n if (this.webgl_unavailable || this.destroyed) {\n return [];\n }\n return this.model.getTracks().slice();\n }\n\n public removeAllTracks() {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n const track_ids = this.model.getTracks();\n this.removeTracks(track_ids);\n }\n\n public removeExpansionTracksFor(track_id: TrackId) {\n // remove all expansion tracks for this track\n this.removeTracks(this.model.track_expansion_tracks[track_id].slice());\n }\n\n public disableTrackExpansion(track_id: TrackId) {\n this.model.disableTrackExpansion(track_id);\n }\n\n public enableTrackExpansion(track_id: TrackId) {\n this.model.enableTrackExpansion(track_id);\n }\n\n public removeAllExpansionTracksInGroup(index: TrackGroupIndex) {\n const tracks_in_group = this.model.getTrackGroups()[index].tracks,\n expanded_tracks = [];\n let i;\n for (i = 0; i < tracks_in_group.length; i++) {\n if (this.model.isTrackExpanded(tracks_in_group[i])) {\n expanded_tracks.push(tracks_in_group[i]);\n }\n }\n this.suppressRendering();\n for (i = 0; i < expanded_tracks.length; i++) {\n // assume that the expanded tracks are not themselves removed here\n this.removeExpansionTracksFor(expanded_tracks[i]);\n }\n this.releaseRendering();\n }\n\n public setHorzZoomToFit(ids: ColumnId[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.keep_horz_zoomed_to_fit = true;\n this.updateHorzZoomToFitIds(ids);\n this.updateHorzZoomToFit();\n }\n public updateHorzZoomToFitIds(ids: ColumnId[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.keep_horz_zoomed_to_fit_ids = ids.slice();\n if (this.keep_horz_zoomed_to_fit) {\n this.updateHorzZoomToFit();\n }\n }\n private updateHorzZoomToFit() {\n this.setHorzZoom(\n this.getHorzZoomToFit(this.keep_horz_zoomed_to_fit_ids),\n true\n );\n }\n private getHorzZoomToFit(ids: ColumnId[]) {\n ids = ids || [];\n return this.model.getHorzZoomToFit(\n this.cell_view.getVisibleAreaWidth(),\n ids\n );\n }\n private executeHorzZoomCallbacks() {\n for (let i = 0; i < this.horz_zoom_callbacks.length; i++) {\n this.horz_zoom_callbacks[i](this.model.getHorzZoom());\n }\n }\n\n private executeMinimapCloseCallbacks() {\n for (let i = 0; i < this.minimap_close_callbacks.length; i++) {\n this.minimap_close_callbacks[i]();\n }\n }\n\n private doCellMouseOver(uid: ColumnId, track_id: TrackId) {\n if (uid !== null) {\n this.highlightTrackLabelOnly(track_id);\n } else {\n this.highlightTrackLabelOnly(null);\n }\n for (let i = 0; i < this.cell_mouse_over_callbacks.length; i++) {\n this.cell_mouse_over_callbacks[i](uid, track_id);\n }\n }\n\n private doCellClick(uid: ColumnId, track_id: TrackId) {\n for (let i = 0; i < this.cell_click_callbacks.length; i++) {\n this.cell_click_callbacks[i](uid, track_id);\n }\n }\n\n public getHorzZoom() {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n return this.model.getHorzZoom();\n }\n\n public setHorzZoomCentered(z: number) {\n // Save id thats at center pre-zoom\n const centerColIndex = this.cell_view.getViewportOncoprintSpace(\n this.model\n ).center_col_index;\n const centerId = this.model.getIdOrder()[centerColIndex];\n\n // Execute zoom\n this.setHorzZoom(z);\n\n // Set scroll to recenter the saved id\n this.setHorzScroll(\n this.model.getZoomedColumnLeft(centerId) -\n this.cell_view.visible_area_width / 2\n );\n }\n\n public setHorzZoom(z: number, still_keep_horz_zoomed_to_fit?: boolean) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n this.keep_horz_zoomed_to_fit =\n this.keep_horz_zoomed_to_fit && still_keep_horz_zoomed_to_fit;\n\n if (this.model.getHorzZoom() !== z) {\n // Update model if new zoom is different\n this.model.setHorzZoom(z);\n // Update views\n this.cell_view.setHorzZoom(this.model);\n this.minimap_view.setHorzZoom(this.model, this.cell_view);\n\n this.executeHorzZoomCallbacks();\n this.resizeAndOrganizeAfterTimeout();\n }\n return this.model.getHorzZoom();\n }\n\n public getVertZoom() {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n return this.model.getVertZoom();\n }\n\n public setVertZoom(z: number) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n // Update model\n this.model.setVertZoom(z);\n // Update views\n this.cell_view.setVertZoom(this.model);\n this.header_view.render(this.model);\n this.label_view.setVertZoom(this.model, this.getCellViewHeight);\n this.track_info_view.setVertZoom(this.model, this.getCellViewHeight);\n this.track_options_view.setVertZoom(this.model, this.getCellViewHeight);\n this.minimap_view.setVertZoom(this.model, this.cell_view);\n\n this.resizeAndOrganizeAfterTimeout();\n return this.model.getVertZoom();\n }\n\n private doSetScroll(scroll_left: number, scroll_top: number) {\n // Update model\n scroll_left = Math.min(scroll_left, this.maxOncoprintScrollLeft());\n scroll_top = Math.min(scroll_top, this.maxOncoprintScrollTop());\n this.model.setScroll(scroll_left, scroll_top);\n // Update views\n\n this.cell_view.setScroll(this.model);\n this.header_view.setScroll(this.model);\n this.label_view.setScroll(this.model, this.getCellViewHeight);\n this.track_info_view.setScroll(this.model);\n this.track_options_view.setScroll(this.model);\n this.minimap_view.setScroll(this.model, this.cell_view);\n }\n\n private setDummyScrollDivScroll() {\n const scroll_left = this.model.getHorzScroll();\n const scroll_top = this.model.getVertScroll();\n\n const maximum_scroll_left = this.maxOncoprintScrollLeft();\n const maximum_scroll_top = this.maxOncoprintScrollTop();\n let onc_scroll_left_prop =\n maximum_scroll_left > 0 ? scroll_left / maximum_scroll_left : 0;\n let onc_scroll_top_prop =\n maximum_scroll_top > 0 ? scroll_top / maximum_scroll_top : 0;\n onc_scroll_left_prop = clamp(onc_scroll_left_prop, 0, 1);\n onc_scroll_top_prop = clamp(onc_scroll_top_prop, 0, 1);\n\n const maximum_dummy_scroll_div_scroll = this.maxDummyScrollDivScroll();\n const maximum_div_scroll_left = maximum_dummy_scroll_div_scroll.left;\n const maximum_div_scroll_top = maximum_dummy_scroll_div_scroll.top;\n\n this.target_dummy_scroll_left = Math.round(\n onc_scroll_left_prop * maximum_div_scroll_left\n );\n this.target_dummy_scroll_top = Math.round(\n onc_scroll_top_prop * maximum_div_scroll_top\n );\n this.$dummy_scroll_div.scrollLeft(this.target_dummy_scroll_left);\n this.$dummy_scroll_div.scrollTop(this.target_dummy_scroll_top);\n }\n\n public setScroll(scroll_left: number, scroll_top: number) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.doSetScroll(scroll_left, scroll_top);\n this.setDummyScrollDivScroll();\n }\n\n public setZoom(zoom_x: number, zoom_y: number) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n // Update model\n this.model.setZoom(zoom_x, zoom_y);\n // Update views\n this.cell_view.setZoom(this.model);\n this.header_view.render(this.model);\n this.label_view.setZoom(this.model, this.getCellViewHeight);\n this.track_info_view.setZoom(this.model, this.getCellViewHeight);\n this.track_options_view.setZoom(this.model, this.getCellViewHeight);\n this.minimap_view.setZoom(this.model, this.cell_view);\n }\n\n public setHorzScroll(s: number) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n // Update model\n this.model.setHorzScroll(Math.min(s, this.maxOncoprintScrollLeft()));\n // Update views\n this.cell_view.setHorzScroll(this.model);\n this.label_view.setHorzScroll(this.model);\n this.track_info_view.setHorzScroll(this.model);\n this.track_options_view.setHorzScroll(this.model);\n this.minimap_view.setHorzScroll(this.model, this.cell_view);\n // Update dummy scroll div\n this.setDummyScrollDivScroll();\n\n return this.model.getHorzScroll();\n }\n public setVertScroll(s: number) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n // Update model\n this.model.setVertScroll(Math.min(s, this.maxOncoprintScrollTop()));\n // Update views\n this.cell_view.setVertScroll(this.model);\n this.header_view.setVertScroll(this.model);\n this.label_view.setVertScroll(this.model, this.getCellViewHeight);\n this.track_info_view.setVertScroll(this.model);\n this.track_options_view.setVertScroll(this.model);\n this.minimap_view.setVertScroll(this.model, this.cell_view);\n // Update dummy scroll div\n this.setDummyScrollDivScroll();\n\n return this.model.getVertScroll();\n }\n public setViewport(vp: MinimapViewportSpec) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n // Zoom\n const zoom_x = this.model.getHorzZoomToFitCols(\n this.cell_view.getVisibleAreaWidth(),\n vp.left_col,\n vp.right_col\n );\n this.setZoom(zoom_x, vp.zoom_y);\n // Scroll\n const scroll_left = Math.min(\n this.model.getZoomedColumnLeft(\n this.model.getIdOrder()[vp.left_col]\n ),\n this.maxOncoprintScrollLeft()\n );\n const scroll_top = Math.min(\n vp.scroll_y_proportion * this.model.getOncoprintHeight(),\n this.maxOncoprintScrollTop()\n );\n this.setScroll(scroll_left, scroll_top);\n\n this.executeHorzZoomCallbacks();\n }\n\n public getTrackData(track_id: TrackId) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n return this.model.getTrackData(track_id);\n }\n\n public getTrackDataIdKey(track_id: TrackId) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n return this.model.getTrackDataIdKey(track_id);\n }\n\n /**\n * Sets the data for an Oncoprint track.\n *\n * @param track_id - the ID that identifies the track\n * @param {Object[]} data - the list of data for the cells\n * @param {string} data_id_key - name of the property of the\n * data objects to use as the (column) key\n */\n public setTrackData(\n track_id: TrackId,\n data: Datum[],\n data_id_key: string & keyof Datum\n ) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setTrackData(track_id, data, data_id_key);\n this.cell_view.setTrackData(this.model, track_id);\n this.header_view.render(this.model);\n this.legend_view.setTrackData(this.model);\n this.minimap_view.setTrackData(this.model, this.cell_view);\n\n if (\n this.model.keep_sorted &&\n this.model.isSortAffected(track_id, 'track')\n ) {\n this.sort();\n }\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public setTrackImportantIds(\n track_id: TrackId,\n ids: ColumnId[] | undefined\n ) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setTrackImportantIds(track_id, ids);\n this.cell_view.setTrackImportantIds(this.model, track_id);\n this.legend_view.setTrackImportantIds(this.model);\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public setTrackGroupSortPriority(priority: TrackGroupIndex[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setTrackGroupSortPriority(priority);\n this.cell_view.setTrackGroupSortPriority(this.model);\n\n if (this.model.keep_sorted) {\n this.sort();\n }\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public resetSortableTracksSortDirection() {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.resetSortableTracksSortDirection(true);\n\n if (this.model.keep_sorted) {\n this.sort();\n }\n }\n\n public setTrackSortDirection(track_id: TrackId, dir: TrackSortDirection) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n if (this.model.isTrackSortDirectionChangeable(track_id)) {\n this.model.setTrackSortDirection(track_id, dir);\n\n if (\n this.model.keep_sorted &&\n this.model.isSortAffected(track_id, 'track')\n ) {\n this.sort();\n }\n\n if (this.model.getTrackSortDirection(track_id) === 0) {\n if (this.model.getTrackShowGaps(track_id)) {\n this.setTrackShowGaps(track_id, false);\n }\n }\n }\n return this.model.getTrackSortDirection(track_id);\n }\n\n public setTrackSortComparator(\n track_id: TrackId,\n sortCmpFn: TrackSortSpecification<Datum>\n ) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setTrackSortComparator(track_id, sortCmpFn);\n if (\n this.model.keep_sorted &&\n this.model.isSortAffected(track_id, 'track')\n ) {\n this.sort();\n }\n }\n\n public getTrackSortDirection(track_id: TrackId) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n return this.model.getTrackSortDirection(track_id);\n }\n\n public setTrackInfo(track_id: TrackId, msg: string) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setTrackInfo(track_id, msg);\n this.track_info_view.setTrackInfo(this.model, this.getCellViewHeight);\n }\n\n public setTrackTooltipFn(\n track_id: TrackId,\n tooltipFn: TrackTooltipFn<Datum>\n ) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setTrackTooltipFn(track_id, tooltipFn);\n }\n\n public setShowTrackSublabels(show: boolean) {\n this.model.setShowTrackSublabels(show);\n this.label_view.setShowTrackSublabels(\n this.model,\n this.getCellViewHeight\n );\n\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public setTrackShowGaps(track_id: TrackId, showGaps: boolean) {\n this.model.setTrackShowGaps(track_id, showGaps);\n if (this.model.getTrackSortDirection(track_id) === 0 && showGaps) {\n this.setTrackSortDirection(track_id, 1);\n }\n this.track_options_view.setTrackShowGaps(\n this.model,\n this.getCellViewHeight\n );\n this.cell_view.setTrackShowGaps(this.model);\n }\n\n public sort() {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n const self = this;\n\n // Increment lastSortId in order to indicate that a new sort is initiated.\n this.incrementLastSortId();\n const thisSortId = this.lastSortId;\n\n this.model.sort().then(function(clusterSortResult) {\n // Make sure lastSortId is still the same as it was when we first called sort()\n // If not, then just skip updating.\n //\n // This prevents bugs due to stale sorts finishing asynchronously in the wrong order.\n if (self.lastSortId !== thisSortId) {\n return;\n }\n self.label_view.sort(self.model, self.getCellViewHeight);\n self.track_options_view.sort(self.model, self.getCellViewHeight);\n self.cell_view.sort(self.model);\n self.minimap_view.sort(self.model, self.cell_view);\n\n if (clusterSortResult) {\n self.setTrackGroupOrder(\n clusterSortResult.track_group_index,\n clusterSortResult.track_id_order,\n true\n );\n }\n });\n }\n\n public shareRuleSet(source_track_id: TrackId, target_track_id: TrackId) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.shareRuleSet(source_track_id, target_track_id);\n this.cell_view.shareRuleSet(this.model, target_track_id);\n this.legend_view.shareRuleSet(this.model);\n this.minimap_view.shareRuleSet(this.model, this.cell_view);\n }\n\n public setRuleSet(track_id: TrackId, rule_set_params: RuleSetParams) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setRuleSet(track_id, OncoprintRuleSet(rule_set_params));\n this.cell_view.setRuleSet(this.model, track_id);\n this.legend_view.setRuleSet(this.model);\n this.minimap_view.setRuleSet(this.model, this.cell_view);\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public setSortConfig(params: SortConfig) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setSortConfig(params);\n this.cell_view.setSortConfig(this.model);\n this.track_options_view.setSortConfig(this.model);\n\n if (this.model.keep_sorted) {\n this.sort();\n }\n }\n public setIdOrder(ids: ColumnId[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n // Update model\n this.model.setIdOrder(ids);\n // Update views\n this.cell_view.setIdOrder(this.model, ids);\n this.minimap_view.setIdOrder(this.model, this.cell_view);\n\n if (this.model.keep_sorted) {\n this.sort();\n }\n }\n\n public setTrackGroupHeader(\n index: TrackGroupIndex,\n header?: TrackGroupHeader\n ) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setTrackGroupHeader(index, header);\n this.label_view.setTrackGroupHeader(this.model, this.getCellViewHeight);\n this.header_view.render(this.model);\n this.track_info_view.setTrackGroupHeader(\n this.model,\n this.getCellViewHeight\n );\n this.track_options_view.setTrackGroupHeader(\n this.model,\n this.getCellViewHeight\n );\n this.minimap_view.setTrackGroupHeader(this.model, this.cell_view);\n this.cell_view.setTrackGroupHeader(this.model);\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public disableInteraction() {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n //this.label_view.disableInteraction();\n //this.cell_view.disableInteraction();\n this.track_options_view.disableInteraction();\n //this.track_info_view.disableInteraction();\n //this.legend_view.disableInteraction();\n }\n public enableInteraction() {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n //this.label_view.enableInteraction();\n //this.cell_view.enableInteraction();\n this.track_options_view.enableInteraction();\n //this.track_info_view.enableInteraction();\n //this.legend_view.enableInteraction();\n }\n public suppressRendering() {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.rendering_suppressed_depth += 1;\n this.label_view.suppressRendering();\n this.header_view.suppressRendering();\n this.cell_view.suppressRendering();\n this.track_options_view.suppressRendering();\n this.track_info_view.suppressRendering();\n this.legend_view.suppressRendering();\n this.minimap_view.suppressRendering();\n }\n\n public releaseRendering(onComplete?: () => void) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n if (this.model.rendering_suppressed_depth > 0) {\n this.model.rendering_suppressed_depth -= 1;\n this.model.rendering_suppressed_depth = Math.max(\n 0,\n this.model.rendering_suppressed_depth\n );\n if (this.model.rendering_suppressed_depth === 0) {\n this.model.releaseRendering();\n this.label_view.releaseRendering(\n this.model,\n this.getCellViewHeight\n );\n this.header_view.releaseRendering(this.model);\n this.cell_view.releaseRendering(this.model);\n this.track_options_view.releaseRendering(\n this.model,\n this.getCellViewHeight\n );\n this.track_info_view.releaseRendering(\n this.model,\n this.getCellViewHeight\n );\n this.legend_view.releaseRendering(this.model);\n this.minimap_view.releaseRendering(this.model, this.cell_view);\n this.resizeAndOrganizeAfterTimeout(onComplete);\n }\n }\n }\n\n public triggerPendingResizeAndOrganize(onComplete?: () => void) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n if (this.pending_resize_and_organize) {\n this.pending_resize_and_organize = false;\n this.resizeAndOrganizeAfterTimeout(onComplete);\n }\n }\n\n public hideIds(to_hide: ColumnId[], show_others?: boolean) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.hideIds(to_hide, show_others);\n this.cell_view.hideIds(this.model);\n this.minimap_view.hideIds(this.model, this.cell_view);\n }\n\n public hideTrackLegends(track_ids: TrackId[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n track_ids = [].concat(track_ids);\n this.model.hideTrackLegends(track_ids);\n this.legend_view.hideTrackLegends(this.model);\n this.setLegendTopAfterTimeout();\n }\n\n public showTrackLegends(track_ids: TrackId[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n track_ids = [].concat(track_ids);\n this.model.showTrackLegends(track_ids);\n this.legend_view.showTrackLegends(this.model);\n this.setLegendTopAfterTimeout();\n }\n\n public setCellPaddingOn(cell_padding_on: boolean) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setCellPaddingOn(cell_padding_on);\n this.cell_view.setCellPaddingOn(this.model);\n }\n\n public setTrackCustomOptions(\n track_id: TrackId,\n options: CustomTrackOption[] | undefined\n ) {\n this.model.setTrackCustomOptions(track_id, options);\n this.track_options_view.setTrackCustomOptions(this.model);\n }\n\n public setTrackInfoTooltip(\n track_id: TrackId,\n $tooltip_elt: JQuery | undefined\n ) {\n this.model.setTrackInfoTooltip(track_id, $tooltip_elt);\n }\n\n public setTrackMovable(track_id: TrackId, movable: boolean) {\n this.model.setTrackMovable(track_id, movable);\n this.track_options_view.setTrackMovable(this.model);\n this.label_view.setTrackMovable(this.model);\n }\n\n public setWidth(width: number) {\n this.width = width;\n\n this.resizeAndOrganize();\n }\n\n public setColumnLabels(labels: ColumnProp<ColumnLabel>) {\n this.model.setColumnLabels(labels);\n this.cell_view.setColumnLabels(this.model);\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public setShowTrackLabels(s: boolean) {\n this.model.setShowTrackLabels(s);\n this.label_view.setShowTrackLabels(this.model, this.getCellViewHeight);\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public onCellMouseOver(callback: CellMouseOverCallback) {\n this.cell_mouse_over_callbacks.push(callback);\n }\n\n public onCellClick(callback: CellClickCallback) {\n this.cell_click_callbacks.push(callback);\n }\n\n public toSVG(with_background?: boolean) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n // Returns svg DOM element\n const root = svgfactory.svg(10, 10);\n this.$ctr.append(root);\n const everything_group = svgfactory.group(0, 0);\n root.appendChild(everything_group);\n\n const bgrect = svgfactory.bgrect(10, 10, [255, 255, 255, 1]);\n\n if (with_background) {\n everything_group.appendChild(bgrect);\n }\n\n const label_view_group = this.label_view.toSVGGroup(\n this.model,\n true,\n 0,\n 0\n );\n everything_group.appendChild(label_view_group);\n\n const header_view_group = this.header_view.toSVGGroup(this.model, 0, 0);\n everything_group.appendChild(header_view_group);\n\n const label_view_width = label_view_group.getBBox().width;\n const label_view_padding = label_view_width > 0 ? 30 : 0;\n const track_info_group_x = label_view_width + label_view_padding;\n const track_info_group = this.track_info_view.toSVGGroup(\n this.model,\n track_info_group_x,\n 0\n );\n everything_group.appendChild(track_info_group);\n\n const cell_view_group_x =\n track_info_group_x + track_info_group.getBBox().width + 10;\n const cell_view_group = this.cell_view.toSVGGroup(\n this.model,\n cell_view_group_x,\n 0\n );\n everything_group.appendChild(cell_view_group);\n\n everything_group.appendChild(\n this.legend_view.toSVGGroup(\n this.model,\n 0,\n cell_view_group.getBBox().y +\n cell_view_group.getBBox().height +\n 20\n )\n );\n\n const everything_box = everything_group.getBBox();\n const everything_width = everything_box.x + everything_box.width;\n const everything_height = everything_box.y + everything_box.height;\n root.setAttribute('width', everything_width as any);\n root.setAttribute('height', everything_height as any);\n\n if (with_background) {\n bgrect.setAttribute('width', everything_width as any);\n bgrect.setAttribute('height', everything_height as any);\n }\n root.parentNode.removeChild(root);\n\n return root;\n }\n\n public toCanvas(\n callback: (canvas: HTMLCanvasElement, truncated: boolean) => void,\n resolution?: number\n ) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n // Returns data url, requires IE >= 11\n\n const MAX_CANVAS_SIDE = 8192;\n const svg = this.toSVG(true);\n svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n const width = parseInt(svg.getAttribute('width'), 10);\n const height = parseInt(svg.getAttribute('height'), 10);\n const canvas = document.createElement('canvas');\n\n resolution = resolution || 1;\n const truncated =\n width * resolution > MAX_CANVAS_SIDE ||\n height * resolution > MAX_CANVAS_SIDE;\n canvas.setAttribute(\n 'width',\n Math.min(MAX_CANVAS_SIDE, width * resolution).toString()\n );\n canvas.setAttribute(\n 'height',\n Math.min(MAX_CANVAS_SIDE, height * resolution).toString()\n );\n\n const container = document.createElement('div');\n container.appendChild(svg);\n const svg_data_str = container.innerHTML;\n const svg_data_uri =\n 'data:image/svg+xml;base64,' + window.btoa(svg_data_str);\n\n const ctx = canvas.getContext('2d');\n ctx.setTransform(resolution, 0, 0, resolution, 0, 0);\n const img = new Image();\n\n img.onload = function() {\n ctx.drawImage(img, 0, 0);\n callback(canvas, truncated);\n };\n img.onerror = function() {\n console.log('IMAGE LOAD ERROR');\n };\n\n img.src = svg_data_uri;\n return img;\n }\n\n public toDataUrl(callback: (dataURL: string) => void) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.toCanvas(function(canvas) {\n callback(canvas.toDataURL());\n });\n }\n\n public highlightTrackLabelOnly(track_id: TrackId) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.label_view.highlightTrackLabelOnly(track_id, this.model);\n }\n\n public setHighlightedTracks(track_ids: TrackId[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setHighlightedTracks(track_ids);\n this.label_view.setHighlightedTracks(this.model);\n this.cell_view.setHighlightedTracks(this.model);\n }\n\n public setHighlightedIds(ids: ColumnId[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setHighlightedIds(ids);\n this.cell_view.setHighlightedIds(this.model);\n }\n\n public getIdOrder(all?: boolean) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n return this.model.getIdOrder(all);\n }\n\n public setIdClipboardContents(array: ColumnId[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.id_clipboard = array.slice();\n for (let i = 0; i < this.clipboard_change_callbacks.length; i++) {\n this.clipboard_change_callbacks[i](array);\n }\n }\n public getIdClipboardContents() {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n return this.id_clipboard.slice();\n }\n public onClipboardChange(callback: ClipboardChangeCallback) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.clipboard_change_callbacks.push(callback);\n }\n\n public destroy() {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.cell_view.destroy();\n this.header_view.destroy();\n this.track_options_view.destroy();\n this.track_info_view.destroy();\n this.destroyed = true;\n }\n\n public clearMouseOverEffects() {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.cell_view.clearOverlay();\n this.label_view.highlightTrackLabelOnly(null, this.model);\n }\n}\n"],"names":["ClusteringWorker","clamp","BucketSort.bucketSort","BucketSort.compareFull","$","makeSVGElement","makeIdCounter","makeSvgElement","img","TOGGLE_BTN_CLASS","TOGGLE_BTN_OPEN_CLASS","DROPDOWN_CLASS","SEPARATOR_CLASS","NTH_CLASS_PREFIX","CLOSE_MENUS_EVENT","TRACK_OPTIONS_VIEW_CLOSE_MENUS_EVENT","menuDotsIcon","HEADER_VIEW_CLOSE_MENUS_EVENT","zoomToFitIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/js/polyfill.ts","../src/js/binarysearch.ts","../src/js/CachedProperty.ts","../src/js/clustering.ts","../src/js/utils.ts","../src/js/bucketsort.ts","../src/js/precomputedcomparator.ts","../src/js/modelutils.ts","../src/js/oncoprintmodel.ts","../src/js/makesvgelement.ts","../src/js/extractrgba.ts","../src/js/oncoprintshapetosvg.ts","../src/js/svgfactory.ts","../src/js/oncoprintshapetovertexes.ts","../src/js/oncoprintshape.ts","../src/js/shaders.ts","../src/js/oncoprintwebglcellview.ts","../src/js/oncoprintlabelview.ts","../src/js/heatmapcolors.ts","../src/js/oncoprintruleset.ts","../src/img/menudots.svg","../src/js/oncoprintheaderview.ts","../src/js/oncoprinttrackoptionsview.ts","../src/js/oncoprintlegendrenderer.ts","../src/js/oncoprinttooltip.ts","../src/js/oncoprinttrackinfoview.ts","../src/js/oncoprintzoomslider.ts","../src/img/zoomtofit.svg","../src/js/oncoprintminimapview.ts","../src/js/oncoprint.ts"],"sourcesContent":["/*\n * Copyright (c) 2016 Memorial Sloan-Kettering Cancer Center.\n *\n * This library is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS\n * FOR A PARTICULAR PURPOSE. The software and documentation provided hereunder\n * is on an \"as is\" basis, and Memorial Sloan-Kettering Cancer Center has no\n * obligations to provide maintenance, support, updates, enhancements or\n * modifications. In no event shall Memorial Sloan-Kettering Cancer Center be\n * liable to any party for direct, indirect, special, incidental or\n * consequential damages, including lost profits, arising out of the use of this\n * software and its documentation, even if Memorial Sloan-Kettering Cancer\n * Center has been advised of the possibility of such damage.\n */\n\n/*\n * This file is part of cBioPortal.\n *\n * cBioPortal is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport type OMath = Math & { log2: (x: number) => number };\nexport const OMath: OMath = Math as any;\n\nOMath.log2 =\n OMath.log2 ||\n function(x: number) {\n return Math.log(x) / Math.LN2;\n };\n","export default function binarysearch<T>(\n array: T[],\n target_key: number,\n keyFn: (t: T) => number,\n return_closest_lower_if_not_found?: boolean\n) {\n if (!array.length) {\n return -1; // return -1 for an empty array\n }\n var upper_excl = array.length;\n var lower_incl = 0;\n var middle;\n while (lower_incl < upper_excl) {\n middle = Math.floor((upper_excl + lower_incl) / 2);\n var middle_key = keyFn(array[middle]);\n if (middle_key === target_key) {\n return middle;\n } else if (target_key > middle_key) {\n lower_incl = middle + 1;\n } else if (target_key < middle_key) {\n upper_excl = middle;\n } else {\n // make sure we don't infinite loop in case anything's wrong\n //\tso that those three cases don't cover everything\n return -1;\n }\n }\n if (return_closest_lower_if_not_found) {\n return Math.max(0, lower_incl - 1);\n } else {\n return -1;\n }\n}\n","export default class CachedProperty<T> {\n private bound_properties: CachedProperty<any>[] = [];\n\n constructor(private value: T, private updateFn: (...args: any[]) => T) {}\n\n public update(...args: any[]) {\n this.value = this.updateFn.apply(null, args);\n for (let i = 0; i < this.bound_properties.length; i++) {\n this.bound_properties[i].update(...args);\n }\n }\n\n public get() {\n return this.value;\n }\n\n public updateAndGet() {\n this.update();\n return this.get();\n }\n public addBoundProperty(cached_property: CachedProperty<any>) {\n this.bound_properties.push(cached_property);\n }\n}\n","import ClusteringWorker from 'web-worker:./workers/clustering-worker';\nimport {\n CaseItem,\n CasesAndEntities,\n ClusteringMessage,\n EntityItem,\n} from './workers/clustering-worker';\n\n/**\n * Executes the clustering of casesAndEntitites in the requested\n * dimension (CASES or ENTITIES).\n *\n * @param casesAndEntitites: Object with sample(or patient)Id and map\n * of geneticEntity/value pairs. Example:\n *\n * var a =\n * {\n * \"TCGA-AO-AA98-01\":\n * {\n * \t\"TP53\": 0.045,\n * \t\"BRA1\": -0.89\n * }\n * },\n * ...\n *\n * @return a deferred which gets resolved with the clustering result\n * when the clustering is done.\n */\nfunction _hcluster(\n casesAndEntitites: ClusteringMessage['casesAndEntities'],\n dimension: ClusteringMessage['dimension']\n) {\n var worker = new ClusteringWorker();\n var message = new Object() as ClusteringMessage;\n //@ts-ignore\n var def = new $.Deferred();\n message.casesAndEntities = casesAndEntitites;\n message.dimension = dimension;\n worker.postMessage(message);\n worker.onmessage = function(m: any) {\n def.resolve(m.data as CaseItem[] | EntityItem[]);\n };\n return def.promise();\n}\n\n/**\n * Use: cbio.stat.hclusterCases(a);\n\n * @return a deferred which gets resolved with the clustering result\n * when the clustering is done.\n */\nexport function hclusterColumns(\n casesAndEntitites: CasesAndEntities\n): Promise<CaseItem[]> {\n return _hcluster(casesAndEntitites, 'CASES');\n}\n\n/**\n * Use: hclusterGeneticEntities(a);\n *\n * @return a deferred which gets resolved with the clustering result\n * when the clustering is done.\n */\nexport function hclusterTracks(\n casesAndEntitites: CasesAndEntities\n): Promise<EntityItem[]> {\n return _hcluster(casesAndEntitites, 'ENTITIES');\n}\n","import { ComputedShapeParams } from './oncoprintshape';\nimport { RGBAColor } from './oncoprintruleset';\n\nexport type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;\n\nexport function cloneShallow<T extends Object>(obj: T) {\n const ret: Partial<T> = {};\n for (const key of Object.keys(obj) as (keyof T)[]) {\n ret[key] = obj[key];\n }\n return ret as T;\n}\n\nexport function extendArray(target: any[], source: any[]) {\n for (let i = 0; i < source.length; i++) {\n target.push(source[i]);\n }\n}\n\nexport function doesCellIntersectPixel(\n cellHitzone: [number, number],\n pixelX: number\n) {\n // checks intersection with the half-open interval [pixelX, pixelX+1)\n\n const lower = cellHitzone[0],\n upper = cellHitzone[1];\n if (upper < pixelX) {\n return false;\n } else if (lower < pixelX + 1) {\n return true;\n } else {\n return false;\n }\n}\n\nexport function ifndef<T>(x: T | undefined, val: T): T {\n return typeof x === 'undefined' ? val : x;\n}\n\nexport function shallowExtend<T extends Object, S extends Object>(\n target: T,\n source: S\n): T & S {\n const ret: Partial<T & S> = {};\n for (const key of Object.keys(target) as (keyof T & S)[]) {\n ret[key] = target[key as keyof T] as any;\n }\n for (const key of Object.keys(source) as (keyof T & S)[]) {\n ret[key] = source[key as keyof S] as any;\n }\n return ret as T & S;\n}\n\nexport function objectValues<T extends Object>(obj: T): T[keyof T][] {\n return Object.keys(obj).map(function(key: string & keyof T) {\n return obj[key];\n });\n}\n\nexport function arrayFindIndex<T>(\n arr: T[],\n predicate: (t: T) => boolean,\n start_index?: number\n) {\n start_index = start_index || 0;\n for (let i = start_index; i < arr.length; i++) {\n if (predicate(arr[i])) {\n return i;\n }\n }\n return -1;\n}\n\nexport function sgndiff(a: number, b: number) {\n if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n } else {\n return 0;\n }\n}\n\nexport function clamp(x: number, lower: number, upper: number) {\n return Math.max(lower, Math.min(upper, x));\n}\nexport function z_comparator(\n shapeA: ComputedShapeParams,\n shapeB: ComputedShapeParams\n) {\n const zA = shapeA.z;\n const zB = shapeB.z;\n if (zA < zB) {\n return -1;\n } else if (zA > zB) {\n return 1;\n } else {\n return 0;\n }\n}\n\nexport function fastParseInt10(\n x: string,\n substringStart?: number,\n substringEnd?: number\n) {\n // simple, fast parseInt when you know its a base-10 int and\n // you don't need any error handling.\n // Performance testing shows this is 85% faster than built-in parseInt\n substringStart = substringStart || 0;\n substringEnd = substringEnd || x.length;\n let ret = 0;\n for (let i = substringStart; i < substringEnd; i++) {\n ret *= 10;\n ret += x.charCodeAt(i) - 48; // the integer character codes from 0 to 9 are 48, 49, ..., 58\n }\n return ret;\n}\n\nexport function fastParseInt16(x: string) {\n // simple, fast parseInt when you know its a base-16 int and\n // you don't need any error handling.\n // Performance testing shows this is 43% faster than parseInt(x,16)\n let ret = 0;\n let nextCharCode: number;\n for (let i = 0; i < x.length; i++) {\n ret *= 16;\n nextCharCode = x.charCodeAt(i);\n if (nextCharCode > 96) {\n ret += nextCharCode - 87; // lower case letters start at 97. a is 97, should be 10\n } else if (nextCharCode > 64) {\n ret += nextCharCode - 55; // capital letters start at 65. A is 65, should be 10\n } else {\n // otherwise, its an integer\n ret += nextCharCode - 48;\n }\n }\n return ret;\n}\n\nexport function rgbString(color: RGBAColor) {\n return `rgb(${color[0]},${color[1]},${color[2]})`;\n}\n","import { extendArray, fastParseInt10, sgndiff } from './utils';\n\nconst string_type = typeof '';\n\nexport type SortingVector = (number | string)[];\n\ntype BucketRange = {\n lower_index_incl: number;\n upper_index_excl: number;\n};\n\ntype CompareEquals<T> = (a: T, b: T) => number;\n\ntype GetVector<T> = (t: T) => SortingVector;\n\nexport function bucketSort<T>(\n array: T[],\n getVector?: (t: T) => SortingVector,\n compareEquals?: CompareEquals<T>\n) {\n // array: an array of data\n // getVector: a function that takes an element of array and returns an int vector. defaults to identity\n // compareEquals: an optional standard sort comparator - if specified it is run on the\n // results of the final buckets before returning\n getVector =\n getVector ||\n (function(d: SortingVector) {\n return d;\n } as any);\n\n var current_sorted_array = array;\n var current_bucket_ranges = [\n { lower_index_incl: 0, upper_index_excl: array.length },\n ];\n\n var new_sorted_array: T[],\n new_bucket_ranges: BucketRange[],\n bucket_range,\n sorted_result;\n\n // find max length vector, to use as template for vector component types, and whose length will be the sort depth\n var max_length_vector: SortingVector = [];\n var proposed_vector;\n for (var i = 0; i < array.length; i++) {\n proposed_vector = getVector(array[i]);\n if (proposed_vector.length > max_length_vector.length) {\n max_length_vector = proposed_vector;\n }\n }\n var vector_length = max_length_vector.length;\n for (var vector_index = 0; vector_index < vector_length; vector_index++) {\n new_sorted_array = [];\n new_bucket_ranges = [];\n // sort each bucket range, and collect sorted array and new bucket ranges\n for (var j = 0; j < current_bucket_ranges.length; j++) {\n bucket_range = current_bucket_ranges[j];\n sorted_result = bucketSortHelper(\n current_sorted_array,\n getVector,\n bucket_range.lower_index_incl,\n bucket_range.upper_index_excl,\n vector_index,\n typeof max_length_vector[vector_index] === string_type\n );\n extendArray(new_sorted_array, sorted_result.sorted_array);\n extendArray(new_bucket_ranges, sorted_result.bucket_ranges);\n }\n current_sorted_array = new_sorted_array;\n current_bucket_ranges = new_bucket_ranges;\n }\n // if compareEquals specified, sort remaining buckets with it\n if (compareEquals) {\n new_sorted_array = [];\n var bucket_elts;\n for (var j = 0; j < current_bucket_ranges.length; j++) {\n bucket_range = current_bucket_ranges[j];\n bucket_elts = current_sorted_array.slice(\n bucket_range.lower_index_incl,\n bucket_range.upper_index_excl\n );\n bucket_elts.sort(compareEquals);\n extendArray(new_sorted_array, bucket_elts);\n }\n current_sorted_array = new_sorted_array;\n }\n return current_sorted_array;\n}\n\nexport function stringSort<T>(array: T[], getString?: (t: T) => string) {\n // array: an array of data\n // getString: a function that takes an element of `array` and returns a string. defaults to identity\n\n // returns strings sorted in \"natural order\" (i.e. numbers sorted correctly - P2 comes before P10)\n getString =\n getString ||\n (function(d: string) {\n return d;\n } as any);\n // compute string vectors we'll sort with\n var data = array.map(function(d) {\n return {\n d: d,\n vector: stringToVector(getString(d)),\n };\n });\n // sort\n var sorted = bucketSort(data, function(d) {\n return d.vector;\n });\n // return original passed-in data\n return sorted.map(function(datum) {\n return datum.d;\n });\n}\n\nexport function stringToVector(string: string) {\n var vector = [];\n var len = string.length;\n var numberStartIncl = -1;\n var charCode;\n for (var i = 0; i < len; i++) {\n charCode = string.charCodeAt(i);\n if (charCode >= 48 && charCode <= 57) {\n // if character is numeric digit 0-9\n if (numberStartIncl === -1) {\n // if we're not in a number yet, start number\n numberStartIncl = i;\n }\n // otherwise, nothing to do\n } else {\n // character is not numeric\n if (numberStartIncl > -1) {\n // if we're in a number, then we need to add the number to the vector\n vector.push(fastParseInt10(string, numberStartIncl, i));\n // and record no longer in a number\n numberStartIncl = -1;\n }\n // add character code to vector\n vector.push(charCode);\n }\n }\n if (numberStartIncl > -1) {\n // if we're in a number at the end of the string, add it to vector\n vector.push(fastParseInt10(string, numberStartIncl));\n // no need to reset numberStartIncl because the algorithm is done\n }\n return vector;\n}\n\nexport function compareFull<T>(\n d1: T,\n d2: T,\n getVector: GetVector<T>,\n compareEquals?: CompareEquals<T>\n) {\n // utility function - comparator that describes sort order given by bucketSort\n var ret = compare(getVector(d1), getVector(d2));\n if (ret === 0 && compareEquals) {\n ret = compareEquals(d1, d2);\n }\n return ret;\n}\n\nfunction compareVectorElements(elt1: number | string, elt2: number | string) {\n if (typeof elt1 === string_type) {\n return compare(\n stringToVector(elt1 as string),\n stringToVector(elt2 as string)\n );\n } else {\n return sgndiff(elt1 as number, elt2 as number);\n }\n}\n\nexport function compare(vector1: SortingVector, vector2: SortingVector) {\n // utility function - comparator that describes vector sort order given by bucketSort\n\n var ret = 0;\n // go left to right, return result of first difference\n // if one vector is shorter, that one comes first\n var cmp;\n for (var i = 0; i < vector1.length; i++) {\n if (i >= vector2.length) {\n // if we've gotten here, that means no change up til i, and vector2 is shorter\n ret = 1;\n break;\n }\n cmp = compareVectorElements(vector1[i], vector2[i]);\n if (cmp !== 0) {\n ret = cmp;\n break;\n }\n }\n if (ret === 0) {\n if (vector1.length < vector2.length) {\n // we iterated through vector1, so if we get here and no difference, then if\n // vector1 is shorter, then it comes first\n ret = -1;\n }\n // theres no way to get here and no difference if vector2 is shorter\n }\n return ret;\n}\n\nexport function bucketSortHelper<T>(\n array: T[],\n getVector: GetVector<T>,\n sort_range_lower_index_incl: number,\n sort_range_upper_index_excl: number,\n vector_index: number,\n isStringElt: boolean\n) {\n // returns { sorted_array: d[], bucket_ranges:{lower_index_incl, upper_index_excl}[]}} },\n // where sorted_array only contains elements from the specified range of\n // array[sort_range_lower_index_incl:sort_range_upper_index_excl]\n\n // stop if empty sort range, or end of vector\n if (\n !array.length ||\n sort_range_lower_index_incl >= sort_range_upper_index_excl\n ) {\n return {\n sorted_array: [],\n bucket_ranges: [],\n };\n }\n\n // bucket sort the specified range\n // gather elements into buckets\n var buckets: { [vectorElt: string]: T[] } = {};\n var keys = [];\n var vector, key;\n var sortFirst = [];\n for (\n var i = sort_range_lower_index_incl;\n i < sort_range_upper_index_excl;\n i++\n ) {\n vector = getVector(array[i]);\n if (vector.length > vector_index) {\n key = vector[vector_index];\n if (!(key in buckets)) {\n keys.push(key);\n buckets[key] = [];\n }\n buckets[key].push(array[i]);\n } else {\n // if the vector has no entry at this index, sort earlier, in line w string sorting convention of shorter strings first\n sortFirst.push(array[i]);\n }\n }\n // reduce in sorted order\n if (!isStringElt) {\n // sort numbers\n keys.sort(sgndiff);\n } else {\n // sort strings\n keys = stringSort(keys);\n }\n\n var sorted_array: T[] = [];\n var bucket_ranges = [];\n var lower_index_incl, upper_index_excl;\n // add sortFirst\n if (sortFirst.length) {\n lower_index_incl = sort_range_lower_index_incl + sorted_array.length;\n bucket_ranges.push({\n lower_index_incl: lower_index_incl,\n upper_index_excl: lower_index_incl + sortFirst.length,\n });\n extendArray(sorted_array, sortFirst);\n }\n for (var i = 0; i < keys.length; i++) {\n var bucket = buckets[keys[i]];\n lower_index_incl = sort_range_lower_index_incl + sorted_array.length;\n upper_index_excl = lower_index_incl + bucket.length;\n bucket_ranges.push({\n lower_index_incl: lower_index_incl,\n upper_index_excl: upper_index_excl,\n });\n extendArray(sorted_array, bucket);\n }\n\n return { sorted_array: sorted_array, bucket_ranges: bucket_ranges };\n}\n","import * as BucketSort from './bucketsort';\nimport binarysearch from './binarysearch';\nimport hasElementsInInterval from './haselementsininterval';\nimport {\n ColumnId,\n TrackSortComparator,\n TrackSortDirection,\n TrackSortSpecification,\n TrackSortSpecificationComparators,\n TrackSortSpecificationVectors,\n TrackSortVector,\n} from './oncoprintmodel';\nimport { SortingVector } from './bucketsort';\n\ntype DatumWithVectors<T> = {\n d: T;\n preferred_vector: SortingVector;\n mandatory_vector: SortingVector;\n};\n\nexport default class PrecomputedComparator<T> {\n private preferred_change_points: number[];\n private mandatory_change_points: number[];\n private id_to_index: { [columnId: string]: number };\n\n constructor(\n list: T[],\n comparator: TrackSortSpecification<T>,\n sort_direction: TrackSortDirection,\n element_identifier_key: string & keyof T\n ) {\n if (comparator.isVector) {\n this.initializeVector(\n list,\n comparator,\n sort_direction,\n element_identifier_key\n );\n } else {\n this.initializeComparator(\n list,\n comparator as TrackSortSpecificationComparators<T>,\n sort_direction,\n element_identifier_key\n );\n }\n }\n\n private initializeComparator(\n list: T[],\n comparator:\n | TrackSortComparator<T>\n | TrackSortSpecificationComparators<T>,\n sort_direction: TrackSortDirection,\n element_identifier_key: keyof T\n ) {\n // initializeComparator initializes the PrecomputedComparator in the case that\n //\tthe sort order is given using a comparator\n let preferred, mandatory;\n if (typeof comparator === 'function') {\n preferred = comparator;\n mandatory = comparator;\n } else {\n preferred = comparator.preferred;\n mandatory = comparator.mandatory;\n }\n function makeDirectedComparator(cmp: TrackSortComparator<T>) {\n return function(d1: T, d2: T) {\n if (sort_direction === 0) {\n return 0;\n }\n const res = cmp(d1, d2);\n if (res === 2) {\n return 1;\n } else if (res === -2) {\n return -1;\n } else {\n return res * sort_direction;\n }\n };\n }\n const preferredComparator = makeDirectedComparator(preferred);\n const mandatoryComparator = makeDirectedComparator(mandatory);\n const sorted_list = list.sort(preferredComparator);\n\n // i is a change point iff comp(elt[i], elt[i+1]) !== 0\n this.preferred_change_points = [0]; // i is a preferred change pt iff its a change pt with comp = preferredComparator but not with comp = mandatoryComparator\n this.mandatory_change_points = [0]; // i is a mandatory change pt iff its a change pt with comp = mandatoryComparator\n\n // note that by the following process, preferred_change_points and mandatory_change_points are sorted\n for (let i = 1; i < sorted_list.length; i++) {\n if (mandatoryComparator(sorted_list[i - 1], sorted_list[i]) !== 0) {\n this.mandatory_change_points.push(i);\n } else if (\n preferredComparator(sorted_list[i - 1], sorted_list[i]) !== 0\n ) {\n this.preferred_change_points.push(i);\n }\n }\n this.id_to_index = {};\n for (let i = 0; i < sorted_list.length; i++) {\n this.id_to_index[\n (sorted_list[i][element_identifier_key] as any) as string\n ] = i;\n }\n }\n\n private initializeVector(\n list: T[],\n getVector: TrackSortSpecificationVectors<T>,\n sort_direction: TrackSortDirection,\n element_identifier_key: keyof T\n ) {\n // initializeVector initializes the PrecomputedComparator in the case that the sort order is specified by vectors for bucket sort\n function makeDirectedVector(vec: TrackSortVector<T>) {\n if (sort_direction === 0) {\n return function(d: T) {\n return 0;\n };\n } else {\n return function(d: T) {\n return vec(d).map(function(n: number | string) {\n if (typeof n === 'number') {\n return n * sort_direction;\n } else {\n return n;\n }\n });\n };\n }\n }\n const preferredVector = makeDirectedVector(getVector.preferred);\n const mandatoryVector = makeDirectedVector(getVector.mandatory);\n\n // associate each data to its vector and sort them together\n const list_with_vectors: DatumWithVectors<T>[] = list.map(function(d) {\n return {\n d: d,\n preferred_vector: preferredVector(d),\n mandatory_vector: mandatoryVector(d),\n };\n }) as DatumWithVectors<T>[];\n // sort by preferred vector\n const _compareEquals = getVector.compareEquals;\n const compareEquals = _compareEquals\n ? function(d1: DatumWithVectors<T>, d2: DatumWithVectors<T>) {\n return _compareEquals(d1.d, d2.d);\n }\n : undefined;\n const sorted_list = BucketSort.bucketSort(\n list_with_vectors,\n function(d) {\n return d.preferred_vector;\n },\n compareEquals\n );\n\n // i is a change point iff comp(elt[i], elt[i+1]) !== 0\n this.preferred_change_points = [0]; // i (besides 0) is a preferred change pt iff its a change pt with comp = preferredComparator but not with comp = mandatoryComparator\n this.mandatory_change_points = [0]; // i (besides 0) is a mandatory change pt iff its a change pt with comp = mandatoryComparator\n\n // note that by the following process, preferred_change_points and mandatory_change_points are sorted\n const getMandatoryVector = function(d: {\n mandatory_vector: (number | string)[];\n }) {\n return d.mandatory_vector;\n };\n const getPreferredVector = function(d: {\n preferred_vector: (number | string)[];\n }) {\n return d.preferred_vector;\n };\n for (let i = 1; i < sorted_list.length; i++) {\n if (\n BucketSort.compareFull(\n sorted_list[i - 1],\n sorted_list[i],\n getMandatoryVector\n ) !== 0\n ) {\n this.mandatory_change_points.push(i);\n } else if (\n BucketSort.compareFull(\n sorted_list[i - 1],\n sorted_list[i],\n getPreferredVector,\n compareEquals\n ) !== 0\n ) {\n this.preferred_change_points.push(i);\n }\n }\n\n this.id_to_index = {};\n for (let i = 0; i < sorted_list.length; i++) {\n this.id_to_index[\n (sorted_list[i].d[element_identifier_key] as any) as string\n ] = i;\n }\n }\n\n public getSortValue(id: ColumnId) {\n const index = this.id_to_index[id];\n // find greatest lower change points - thats where this should be sorted by\n //\t\tbecause everything between change points has same sort value\n let mandatory = 0;\n let preferred = 0;\n if (this.mandatory_change_points.length) {\n mandatory = this.mandatory_change_points[\n binarysearch(\n this.mandatory_change_points,\n index,\n function(ind) {\n return ind;\n },\n true\n )\n ];\n }\n if (this.preferred_change_points.length) {\n preferred = this.preferred_change_points[\n binarysearch(\n this.preferred_change_points,\n index,\n function(ind) {\n return ind;\n },\n true\n )\n ];\n }\n return {\n mandatory: mandatory,\n preferred: preferred,\n };\n }\n}\n","import OncoprintModel, { TrackGroupProp, TrackProp } from './oncoprintmodel';\n\nexport function calculateTrackTops(model: OncoprintModel, zoomed: boolean) {\n return calculateTrackAndHeaderTops(model, zoomed).trackTops;\n}\n\nexport function calculateHeaderTops(model: OncoprintModel, zoomed: boolean) {\n return calculateTrackAndHeaderTops(model, zoomed).headerTops;\n}\n\nexport function calculateTrackAndHeaderTops(\n model: OncoprintModel,\n zoomed: boolean\n) {\n const trackTops: TrackProp<number> = {};\n const headerTops: TrackGroupProp<number> = {};\n const groups = model.getTrackGroups();\n let y = 0;\n for (let i = 0; i < groups.length; i++) {\n const group = groups[i];\n if (group.header) {\n headerTops[i] = y;\n }\n if (group.tracks.length > 0) {\n // space at top for header\n y += model.getTrackGroupHeaderHeight(group);\n }\n for (let j = 0; j < group.tracks.length; j++) {\n const track_id = group.tracks[j];\n trackTops[track_id] = y;\n y += model.getTrackHeight(track_id, !zoomed);\n }\n if (group.tracks.length > 0) {\n // space at bottom for padding\n y += model.getTrackGroupPadding(!zoomed);\n }\n }\n return { trackTops, headerTops };\n}\n","/* jshint browserify: true, asi: true */\n\nimport binarysearch from './binarysearch';\nimport hasElementsInInterval from './haselementsininterval';\nimport CachedProperty from './CachedProperty';\nimport { hclusterColumns, hclusterTracks } from './clustering';\nimport $ from 'jquery';\nimport * as BucketSort from './bucketsort';\nimport {\n cloneShallow,\n doesCellIntersectPixel,\n ifndef,\n z_comparator,\n} from './utils';\nimport _ from 'lodash';\nimport { RuleSet, RuleSetParams, RuleWithId } from './oncoprintruleset';\nimport { InitParams } from './oncoprint';\nimport { ComputedShapeParams } from './oncoprintshape';\nimport { CaseItem, EntityItem } from './workers/clustering-worker';\nimport PrecomputedComparator from './precomputedcomparator';\nimport { calculateHeaderTops, calculateTrackTops } from './modelutils';\n\nexport type ColumnId = string;\nexport type ColumnIndex = number;\nexport type TrackId = number;\nexport type Datum = any;\nexport type RuleSetId = number;\nexport type TrackGroupHeader = {\n label: {\n text: string;\n // more styling options can go here\n };\n options: CustomTrackGroupOption[]; // for options menu dropdown\n};\nexport type TrackGroup = {\n header?: TrackGroupHeader;\n tracks: TrackId[];\n};\nexport type TrackGroupIndex = number;\nexport type TrackSortDirection = 0 | 1 | -1;\nexport type TrackSortComparator<D> = (d1: D, d2: D) => number; //returns (0|1|2|-1|-2); for comparison-based sort, where 2 and -2 mean force to end or beginning (resp) no matter what direction sorted in\nexport type TrackSortVector<D> = (d: D) => (number | string)[]; // maps data to vector used for bucket sort - types of elements in each position must be same, i.e. Kth element must always be a number, or always be a string\nexport type TrackTooltipFn<D> = (cell_data: D[]) => HTMLElement | string | any;\nexport type TrackSortSpecificationComparators<D> = {\n mandatory: TrackSortComparator<D>; // specifies the mandatory order for the track\n preferred: TrackSortComparator<D>; // specifies the preferred order for the track (can be overridden by mandatory order of higher track)\n isVector?: false;\n};\nexport type TrackSortSpecificationVectors<D> = {\n mandatory: TrackSortVector<D>; // specifies the mandatory order for the track\n preferred: TrackSortVector<D>; // specifies the preferred order for the track (can be overridden by mandatory order of higher track)\n isVector: true;\n compareEquals?: TrackSortComparator<D>; // specifies a comparator to be applied to sort among equal sort vectors in the *preferred* order (optional). eg sort by sample id if all else equal\n};\nexport type TrackSortSpecification<D> =\n | TrackSortSpecificationComparators<D>\n | TrackSortSpecificationVectors<D>;\nexport type ActiveRules = { [ruleId: number]: boolean };\nexport type ActiveRulesCount = { [ruleId: number]: number };\nexport type TrackSortDirectionChangeCallback = (\n track_id: TrackId,\n dir: number\n) => void;\nexport type TrackGapChangeCallBack = (track_id: TrackId, on: boolean) => void;\nexport type CustomTrackOption = {\n label?: string;\n separator?: boolean;\n onClick?: (id: TrackId) => void;\n weight?: string;\n disabled?: boolean;\n};\nexport type CustomTrackGroupOption = {\n label?: string;\n separator?: boolean;\n onClick?: (id: TrackGroupIndex) => void;\n weight?: () => string;\n disabled?: () => boolean;\n};\nexport type UserTrackSpec<D> = {\n target_group?: TrackGroupIndex;\n cell_height?: number;\n track_padding?: number;\n has_column_spacing?: boolean;\n data_id_key?: string & keyof D;\n tooltipFn?: TrackTooltipFn<D>;\n movable?: boolean;\n removable?: boolean;\n removeCallback?: (track_id: TrackId) => void;\n onClickRemoveInTrackMenu?: (track_id: TrackId) => void;\n label?: string;\n sublabel?: string;\n html_label?: string;\n track_label_color?: string;\n track_label_circle_color?: string;\n track_label_font_weight?: string;\n track_label_left_padding?: number;\n link_url?: string;\n description?: string;\n track_info?: string;\n sortCmpFn: TrackSortSpecification<D>;\n sort_direction_changeable?: boolean;\n onSortDirectionChange?: TrackSortDirectionChangeCallback;\n onGapChange?: TrackGapChangeCallBack;\n init_sort_direction?: TrackSortDirection;\n data?: D[];\n rule_set_params?: RuleSetParams;\n expansion_of?: TrackId;\n expandCallback?: (id: TrackId) => void;\n expandButtonTextGetter?: (is_expanded: boolean) => string;\n important_ids?: string[];\n custom_track_options?: CustomTrackOption[];\n $track_info_tooltip_elt?: JQuery;\n track_can_show_gaps?: boolean;\n show_gaps_on_init?: boolean;\n};\nexport type LibraryTrackSpec<D> = UserTrackSpec<D> & {\n rule_set: RuleSet;\n track_id: TrackId;\n};\nexport type TrackOverlappingCells = {\n ids: ColumnId[];\n track: TrackId;\n top: number;\n left: number;\n};\n\nexport type SortConfig =\n | {\n type: 'alphabetical';\n }\n | {\n type: 'order';\n order: string[];\n }\n | {\n type: 'cluster';\n track_group_index: number;\n clusterValueFn: (datum: any) => number;\n }\n | { type?: '' };\n\nexport type IdentifiedShapeList = {\n id: ColumnId;\n shape_list: ComputedShapeParams[];\n};\n\nexport type ClusterSortResult = {\n track_group_index: TrackGroupIndex;\n track_id_order: TrackId[];\n};\n\nexport type ColumnLabel = {\n left_padding_percent?: number;\n text_color?: string;\n circle_color?: string;\n angle_in_degrees?: number;\n text: string;\n};\n\nclass UnionOfSets {\n // a set, to be passed in as argument, is an object where the values are truthy\n private union_count: { [key: string]: number } = {};\n private sets: { [setId: string]: { [key: string]: boolean } } = {};\n\n private setOfKeys(obj: { [key: string]: any }) {\n const set: { [key: string]: boolean } = {};\n for (const k of Object.keys(obj)) {\n if (typeof obj[k] !== 'undefined') {\n set[k] = true;\n }\n }\n return set;\n }\n\n public putSet(id: string, set: { [key: string]: boolean }) {\n this.removeSet(id);\n this.sets[id] = set;\n\n for (const k of Object.keys(set)) {\n if (set[k]) {\n this.union_count[k] = this.union_count[k] || 0;\n this.union_count[k] += 1;\n }\n }\n }\n\n public removeSet(id: string) {\n const union_count = this.union_count;\n const old_set = this.sets[id] || {};\n for (const k of Object.keys(old_set)) {\n if (old_set[k]) {\n union_count[k] -= 1;\n if (union_count[k] === 0) {\n delete union_count[k];\n }\n }\n }\n delete this.sets[id];\n }\n\n public getUnion() {\n return this.setOfKeys(this.union_count);\n }\n}\n\nfunction arrayUnique(arr: string[]) {\n const present: { [elt: string]: boolean } = {};\n const unique = [];\n for (let i = 0; i < arr.length; i++) {\n if (typeof present[arr[i]] === 'undefined') {\n present[arr[i]] = true;\n unique.push(arr[i]);\n }\n }\n return unique;\n}\n\nfunction copyShallowObject<T>(obj: { [key: string]: T }) {\n const copy: { [key: string]: T } = {};\n for (const key of Object.keys(obj)) {\n copy[key] = obj[key];\n }\n return copy;\n}\n\nfunction clamp(x: number, lower: number, upper: number) {\n return Math.min(upper, Math.max(lower, x));\n}\n\nconst MIN_ZOOM_PIXELS = 100;\nconst MIN_CELL_HEIGHT_PIXELS = 3;\n\nexport type TrackProp<T> = { [trackId: number]: T };\nexport type TrackGroupProp<T> = { [trackGroupIndex: number]: T };\nexport type ColumnProp<T> = { [columnId: string]: T };\nexport type ColumnIdSet = { [columnId: string]: any };\n\nexport default class OncoprintModel {\n // Global properties\n private sort_config: SortConfig;\n public rendering_suppressed_depth: number;\n public keep_sorted = false;\n\n // Rendering properties\n public readonly max_height: number;\n private cell_width: number;\n private horz_zoom: number;\n private vert_zoom: number;\n private horz_scroll: number;\n private vert_scroll: number;\n private bottom_padding: number;\n private track_group_padding: number;\n private cell_padding: number;\n private cell_padding_on: boolean;\n private cell_padding_off_cell_width_threshold: number;\n private cell_padding_off_because_of_zoom: boolean;\n private id_order: ColumnId[];\n private hidden_ids: ColumnProp<boolean>;\n private highlighted_ids: ColumnId[];\n private highlighted_tracks: TrackId[];\n private track_group_legend_order: TrackGroupIndex[];\n private show_track_sublabels: boolean;\n private show_track_labels: boolean;\n private column_labels: ColumnProp<ColumnLabel>;\n\n // Track properties\n private track_important_ids: TrackProp<ColumnProp<boolean>>; // set of \"important\" ids - only these ids will cause a used rule to become active and thus shown in the legend\n private track_label: TrackProp<string>;\n private track_label_color: TrackProp<string>;\n private track_label_circle_color: TrackProp<string>;\n private track_label_font_weight: TrackProp<string>;\n private track_label_left_padding: TrackProp<number>;\n private track_sublabel: TrackProp<string>;\n private track_html_label: TrackProp<string>;\n private track_link_url: TrackProp<string>;\n private track_description: TrackProp<string>;\n private cell_height: TrackProp<number>;\n private track_padding: TrackProp<number>;\n private track_data_id_key: TrackProp<string>;\n private track_tooltip_fn: TrackProp<TrackTooltipFn<any>>;\n private track_movable: TrackProp<boolean>;\n private track_removable: TrackProp<boolean>;\n private track_remove_callback: TrackProp<(track_id: TrackId) => void>;\n private track_remove_option_callback: TrackProp<\n (track_id: TrackId) => void\n >;\n private track_sort_cmp_fn: TrackProp<TrackSortSpecification<Datum>>;\n private track_sort_direction_changeable: TrackProp<boolean>;\n private track_sort_direction: TrackProp<TrackSortDirection>;\n private track_sort_direction_change_callback: TrackProp<\n TrackSortDirectionChangeCallback\n >;\n private track_gap_change_callback: TrackProp<TrackGapChangeCallBack>;\n private track_data: TrackProp<Datum[]>;\n private track_rule_set_id: TrackProp<RuleSetId>;\n private track_active_rules: TrackProp<ActiveRules>;\n private track_info: TrackProp<string>;\n private $track_info_tooltip_elt: TrackProp<JQuery>;\n private track_has_column_spacing: TrackProp<boolean>;\n private track_expansion_enabled: TrackProp<boolean>;\n private track_expand_callback: TrackProp<(trackId: TrackId) => void>;\n private track_expand_button_getter: TrackProp<\n (is_expanded: boolean) => string\n >;\n public track_expansion_tracks: TrackProp<TrackId[]>;\n private track_expansion_parent: TrackProp<TrackId>;\n private track_custom_options: TrackProp<CustomTrackOption[]>;\n private track_can_show_gaps: TrackProp<boolean>;\n private track_show_gaps: TrackProp<boolean>;\n\n // Rule set properties\n private rule_sets: { [ruleSetId: number]: RuleSet };\n private rule_set_active_rules: { [ruleSetId: number]: ActiveRulesCount };\n\n // Cached and recomputed properties\n private visible_id_order: CachedProperty<ColumnId[]>;\n private track_id_to_datum: CachedProperty<TrackProp<ColumnProp<Datum>>>;\n private track_present_ids: CachedProperty<UnionOfSets>;\n private present_ids: CachedProperty<ColumnProp<boolean>>;\n private id_to_index: CachedProperty<ColumnProp<number>>;\n private visible_id_to_index: CachedProperty<ColumnProp<number>>;\n private track_tops: CachedProperty<TrackProp<number>>;\n private cell_tops: CachedProperty<TrackProp<number>>;\n private label_tops: CachedProperty<TrackProp<number>>;\n private track_tops_zoomed: CachedProperty<TrackProp<number>>;\n private header_tops_zoomed: CachedProperty<TrackProp<number>>;\n private cell_tops_zoomed: CachedProperty<TrackProp<number>>;\n private label_tops_zoomed: CachedProperty<TrackProp<number>>;\n private column_left: CachedProperty<ColumnProp<number>>;\n private column_left_always_with_padding: CachedProperty<ColumnProp<number>>;\n private zoomed_column_left: CachedProperty<ColumnProp<number>>;\n private column_left_no_padding: CachedProperty<ColumnProp<number>>;\n private precomputed_comparator: CachedProperty<\n TrackProp<PrecomputedComparator<Datum>>\n >;\n private ids_after_a_gap: CachedProperty<ColumnIdSet>;\n private column_indexes_after_a_gap: CachedProperty<number[]>;\n\n private track_groups: TrackGroup[];\n private unclustered_track_group_order?: TrackId[];\n private track_group_sort_priority: TrackGroupIndex[];\n\n constructor(params: InitParams) {\n const model = this;\n\n this.sort_config = {};\n this.rendering_suppressed_depth = 0;\n\n this.max_height = ifndef(params.max_height, 500);\n this.cell_width = ifndef(params.init_cell_width, 6);\n this.horz_zoom = ifndef(params.init_horz_zoom, 1);\n this.vert_zoom = ifndef(params.init_vert_zoom, 1);\n this.horz_scroll = 0;\n this.vert_scroll = 0;\n this.bottom_padding = 0;\n this.track_group_padding = ifndef(params.init_track_group_padding, 10);\n this.cell_padding = ifndef(params.init_cell_padding, 3);\n this.cell_padding_on = ifndef(params.init_cell_padding_on, true);\n this.cell_padding_off_cell_width_threshold = ifndef(\n params.cell_padding_off_cell_width_threshold,\n 2\n );\n this.cell_padding_off_because_of_zoom =\n this.getCellWidth() < this.cell_padding_off_cell_width_threshold;\n this.id_order = [];\n this.hidden_ids = {};\n this.highlighted_ids = [];\n this.highlighted_tracks = [];\n this.track_group_legend_order = [];\n this.show_track_sublabels = false;\n this.show_track_labels = true;\n this.column_labels = {};\n\n // Track Properties\n this.track_important_ids = {}; // a set of \"important\" ids - only these ids will cause a used rule to become active and thus shown in the legend\n this.track_label = {};\n this.track_label_color = {};\n this.track_label_circle_color = {};\n this.track_label_font_weight = {};\n this.track_label_left_padding = {}; // TODO: consolidate track styling properties into one object (help me typescript)\n this.track_sublabel = {};\n this.track_html_label = {};\n this.track_link_url = {};\n this.track_description = {};\n this.cell_height = {};\n this.track_padding = {};\n this.track_data_id_key = {};\n this.track_tooltip_fn = {};\n this.track_movable = {};\n this.track_removable = {};\n this.track_remove_callback = {};\n this.track_remove_option_callback = {};\n this.track_sort_cmp_fn = {};\n this.track_sort_direction_changeable = {};\n this.track_sort_direction = {}; // 1: ascending, -1: descending, 0: not\n this.track_sort_direction_change_callback = {};\n this.track_gap_change_callback = {};\n this.track_data = {};\n this.track_rule_set_id = {}; // track id -> rule set id\n this.track_active_rules = {}; // from track id to active rule map (map with rule ids as keys)\n this.track_info = {};\n this.$track_info_tooltip_elt = {};\n this.track_has_column_spacing = {}; // track id -> boolean\n this.track_expansion_enabled = {}; // track id -> boolean or undefined\n this.track_expand_callback = {}; // track id -> function that adds expansion tracks for its track if set\n this.track_expand_button_getter = {}; // track id -> function from boolean to string if customized\n this.track_expansion_tracks = {}; // track id -> array of track ids if applicable\n this.track_expansion_parent = {}; // track id -> track id if applicable\n this.track_custom_options = {}; // track id -> { label, onClick, weight, disabled }[] ( see index.d.ts :: CustomTrackOption )\n this.track_can_show_gaps = {};\n this.track_show_gaps = {};\n\n // Rule Set Properties\n this.rule_sets = {}; // map from rule set id to rule set\n this.rule_set_active_rules = {}; // map from rule set id to map from rule id to use count\n\n // Cached and Recomputed Properties\n this.visible_id_order = new CachedProperty([], function(\n model: OncoprintModel\n ) {\n const hidden_ids = model.hidden_ids;\n return model.id_order.filter(function(id) {\n return !hidden_ids[id];\n });\n });\n this.track_id_to_datum = new CachedProperty({}, function(\n model,\n track_id\n ) {\n const curr = model.track_id_to_datum.get();\n if (model.getContainingTrackGroup(track_id) !== null) {\n const map: ColumnProp<Datum> = {};\n const data = model.getTrackData(track_id) || [];\n const data_id_key = model.getTrackDataIdKey(track_id) || '';\n for (let i = 0; i < data.length; i++) {\n map[data[i][data_id_key] as string] = data[i];\n }\n curr[track_id] = map;\n } else {\n delete curr[track_id];\n }\n return curr;\n });\n this.track_present_ids = new CachedProperty(new UnionOfSets(), function(\n model,\n track_id\n ) {\n const union = model.track_present_ids.get();\n if (model.getContainingTrackGroup(track_id) !== null) {\n const ids: ColumnProp<boolean> = {};\n const data = model.getTrackData(track_id) || [];\n const data_id_key = model.getTrackDataIdKey(track_id) || '';\n for (let i = 0; i < data.length; i++) {\n ids[data[i][data_id_key] as string] = true;\n }\n union.putSet(track_id, ids);\n } else {\n union.removeSet(track_id);\n }\n return union;\n });\n this.present_ids = new CachedProperty({}, function() {\n return model.track_present_ids.get().getUnion();\n });\n this.track_present_ids.addBoundProperty(this.present_ids);\n\n this.id_to_index = new CachedProperty({}, function() {\n const id_to_index: ColumnProp<number> = {};\n const id_order = model.getIdOrder(true);\n for (let i = 0; i < id_order.length; i++) {\n id_to_index[id_order[i]] = i;\n }\n return id_to_index;\n });\n this.visible_id_to_index = new CachedProperty({}, function() {\n const id_to_index: ColumnProp<number> = {};\n const id_order = model.getIdOrder();\n for (let i = 0; i < id_order.length; i++) {\n id_to_index[id_order[i]] = i;\n }\n return id_to_index;\n });\n this.visible_id_order.addBoundProperty(this.visible_id_to_index);\n\n this.track_groups = [];\n this.track_group_sort_priority = [];\n\n this.track_tops = new CachedProperty({}, function() {\n return calculateTrackTops(model, false);\n });\n this.cell_tops = new CachedProperty({}, function() {\n const track_ids = model.getTracks();\n const track_tops = model.track_tops.get();\n const cell_tops: TrackProp<number> = {};\n for (const id of track_ids) {\n if (id in track_tops) {\n cell_tops[id] =\n track_tops[id] + model.getTrackPadding(id, true);\n }\n }\n return cell_tops;\n });\n this.label_tops = new CachedProperty({}, function() {\n return model.cell_tops.get();\n });\n\n this.track_tops.addBoundProperty(this.cell_tops);\n this.cell_tops.addBoundProperty(this.label_tops);\n\n this.track_tops_zoomed = new CachedProperty({}, function() {\n return calculateTrackTops(model, true);\n });\n this.header_tops_zoomed = new CachedProperty({}, function() {\n return calculateHeaderTops(model, true);\n });\n this.cell_tops_zoomed = new CachedProperty({}, function() {\n const track_ids = model.getTracks();\n const track_tops = model.track_tops_zoomed.get();\n const cell_tops: TrackProp<number> = {};\n for (const id of track_ids) {\n if (id in track_tops) {\n cell_tops[id] = track_tops[id] + model.getTrackPadding(id);\n }\n }\n return cell_tops;\n });\n this.label_tops_zoomed = new CachedProperty({}, function() {\n return model.cell_tops_zoomed.get();\n });\n\n this.track_tops.addBoundProperty(this.track_tops_zoomed);\n this.track_tops_zoomed.addBoundProperty(this.cell_tops_zoomed);\n this.track_tops_zoomed.addBoundProperty(this.header_tops_zoomed);\n this.cell_tops_zoomed.addBoundProperty(this.label_tops_zoomed);\n\n this.precomputed_comparator = new CachedProperty({}, function(\n model: OncoprintModel,\n track_id: TrackId\n ) {\n const curr_precomputed_comparator = model.precomputed_comparator.get();\n curr_precomputed_comparator[track_id] = new PrecomputedComparator(\n model.getTrackData(track_id),\n model.getTrackSortComparator(track_id),\n model.getTrackSortDirection(track_id),\n model.getTrackDataIdKey(track_id)\n );\n return curr_precomputed_comparator;\n }); // track_id -> PrecomputedComparator\n\n this.ids_after_a_gap = new CachedProperty({}, function(\n model: OncoprintModel\n ) {\n const gapIds: { [columnId: string]: boolean } = {};\n const precomputedComparator = model.precomputed_comparator.get();\n const trackIdsWithGaps = model\n .getTracks()\n .filter(trackId => model.getTrackShowGaps(trackId));\n const ids = model.visible_id_order.get();\n\n for (let i = 1; i < ids.length; i++) {\n for (const trackId of trackIdsWithGaps) {\n const comparator = precomputedComparator[trackId];\n if (\n comparator.getSortValue(ids[i - 1]).mandatory !==\n comparator.getSortValue(ids[i]).mandatory\n ) {\n gapIds[ids[i]] = true;\n }\n }\n }\n\n return gapIds;\n });\n this.visible_id_order.addBoundProperty(this.ids_after_a_gap);\n this.precomputed_comparator.addBoundProperty(this.ids_after_a_gap);\n\n this.column_indexes_after_a_gap = new CachedProperty([], function(\n model: OncoprintModel\n ) {\n const ids_after_a_gap = model.ids_after_a_gap.get();\n const id_to_index = model.getVisibleIdToIndexMap();\n return Object.keys(ids_after_a_gap).map(id => id_to_index[id]);\n });\n this.ids_after_a_gap.addBoundProperty(this.column_indexes_after_a_gap);\n\n this.column_left = new CachedProperty({}, function() {\n const cell_width = model.getCellWidth(true);\n const gap_size = model.getGapSize();\n const ids_after_a_gap = model.ids_after_a_gap.get();\n const cell_padding = model.getCellPadding(true);\n const left: ColumnProp<number> = {};\n const ids = model.getIdOrder();\n let current_left = 0;\n for (let i = 0; i < ids.length; i++) {\n if (ids_after_a_gap[ids[i]]) {\n current_left += gap_size;\n }\n left[ids[i]] = current_left;\n current_left += cell_width + cell_padding;\n }\n return left;\n });\n this.ids_after_a_gap.addBoundProperty(this.column_left);\n\n this.column_left_always_with_padding = new CachedProperty(\n {},\n function() {\n const cell_width = model.getCellWidth(true);\n const gap_size = model.getGapSize();\n const ids_after_a_gap = model.ids_after_a_gap.get();\n const cell_padding = model.getCellPadding(true, true);\n const left: ColumnProp<number> = {};\n const ids = model.getIdOrder();\n let current_left = 0;\n for (let i = 0; i < ids.length; i++) {\n if (ids_after_a_gap[ids[i]]) {\n current_left += gap_size;\n }\n left[ids[i]] = current_left;\n current_left += cell_width + cell_padding;\n }\n return left;\n }\n );\n this.column_left.addBoundProperty(this.column_left_always_with_padding);\n\n this.zoomed_column_left = new CachedProperty({}, function() {\n const cell_width = model.getCellWidth();\n const gap_size = model.getGapSize();\n const ids_after_a_gap = model.ids_after_a_gap.get();\n const cell_padding = model.getCellPadding();\n const left: ColumnProp<number> = {};\n const ids = model.getIdOrder();\n let current_left = 0;\n for (let i = 0; i < ids.length; i++) {\n if (ids_after_a_gap[ids[i]]) {\n current_left += gap_size;\n }\n left[ids[i]] = current_left;\n current_left += cell_width + cell_padding;\n }\n return left;\n });\n this.ids_after_a_gap.addBoundProperty(this.zoomed_column_left);\n this.column_left.addBoundProperty(this.zoomed_column_left);\n\n this.column_left_no_padding = new CachedProperty({}, function() {\n const cell_width = model.getCellWidth(true);\n const gap_size = model.getGapSize();\n const ids_after_a_gap = model.ids_after_a_gap.get();\n const left: ColumnProp<number> = {};\n const ids = model.getIdOrder();\n let current_left = 0;\n for (let i = 0; i < ids.length; i++) {\n if (ids_after_a_gap[ids[i]]) {\n current_left += gap_size;\n }\n left[ids[i]] = current_left;\n current_left += cell_width;\n }\n return left;\n });\n this.ids_after_a_gap.addBoundProperty(this.column_left_no_padding);\n this.column_left.addBoundProperty(this.column_left_no_padding);\n }\n\n public setTrackShowGaps(trackId: TrackId, show: boolean) {\n this.track_show_gaps[trackId] = show;\n this.track_gap_change_callback[trackId](trackId, show);\n this.ids_after_a_gap.update(this);\n }\n\n public getTrackShowGaps(trackId: TrackId) {\n return this.track_show_gaps[trackId];\n }\n\n public getTrackCanShowGaps(trackId: TrackId) {\n return this.track_can_show_gaps[trackId];\n }\n\n public getColumnIndexesAfterAGap() {\n return this.column_indexes_after_a_gap.get();\n }\n\n public setTrackGroupHeader(\n index: TrackGroupIndex,\n header?: TrackGroupHeader\n ) {\n this.ensureTrackGroupExists(index);\n this.getTrackGroups()[index].header = header;\n this.track_tops.update();\n }\n\n public getTrackGroupHeaderHeight(trackGroup: TrackGroup) {\n // TODO?: depends on text style settings\n // TODO?: depends on zoom? i dont think it should\n if (trackGroup.header) {\n return 32;\n } else {\n return 0;\n }\n }\n\n public toggleCellPadding() {\n this.cell_padding_on = !this.cell_padding_on;\n this.column_left.update();\n return this.cell_padding_on;\n }\n\n public getCellPadding(base?: boolean, dont_consider_zoom?: boolean) {\n return (\n this.cell_padding *\n (base ? 1 : this.horz_zoom) *\n +this.cell_padding_on *\n (dont_consider_zoom ? 1 : +!this.cell_padding_off_because_of_zoom)\n );\n }\n\n public getHorzZoom() {\n return this.horz_zoom;\n }\n\n public getIdsInZoomedLeftInterval(left: number, right: number) {\n const leftIdIndex = this.getClosestColumnIndexToLeft(left, true);\n const rightIdIndex = this.getClosestColumnIndexToLeft(\n right,\n true,\n true\n );\n return this.getIdOrder().slice(leftIdIndex, rightIdIndex);\n }\n\n public getHorzZoomToFitCols(\n width: number,\n left_col_incl: ColumnIndex,\n right_col_excl: ColumnIndex\n ) {\n // in the end, the zoomed width is:\n // W = z*(right_col_excl - left_col_incl)*baseColumnWidth + #gaps*gapSize\n // -> z = (width - #gaps*gapSize)/(right_col_excl - left_col_incl)*baseColumnWidth\n\n // numerator calculations\n const allGaps = this.getColumnIndexesAfterAGap();\n const gapsBetween = allGaps.filter(\n g => g >= left_col_incl && g < right_col_excl\n );\n const numerator = width - gapsBetween.length * this.getGapSize();\n\n // denominator calculations\n const columnWidthWithPadding =\n this.getCellWidth(true) + this.getCellPadding(true, true);\n const columnWidthNoPadding = this.getCellWidth(true);\n\n const denominatorWithPadding =\n (right_col_excl - left_col_incl) * columnWidthWithPadding;\n const denominatorNoPadding =\n (right_col_excl - left_col_incl) * columnWidthNoPadding;\n\n // put them together\n const zoom_if_cell_padding_on = clamp(\n numerator / denominatorWithPadding,\n 0,\n 1\n );\n const zoom_if_cell_padding_off = clamp(\n numerator / denominatorNoPadding,\n 0,\n 1\n );\n\n let zoom;\n if (!this.cell_padding_on) {\n zoom = zoom_if_cell_padding_off;\n } else {\n const cell_width = this.getCellWidth(true);\n if (\n cell_width * zoom_if_cell_padding_on <\n this.cell_padding_off_cell_width_threshold\n ) {\n if (\n cell_width * zoom_if_cell_padding_off >=\n this.cell_padding_off_cell_width_threshold\n ) {\n // Because of cell padding toggling there's no way to get exactly the desired number of columns.\n // We can see this by contradiction: if we assume that cell padding is on, and try to fit exactly\n // our number of columns, we end up turning cell padding off (outer if statement). If we assume that\n // cell padding is off and try to fit our number of columns, we find that cell padding is on (inner if statement).\n\n // So instead lets just make sure to show all the columns by using the smaller zoom coefficient:\n zoom = zoom_if_cell_padding_on;\n } else {\n zoom = zoom_if_cell_padding_off;\n }\n } else {\n zoom = zoom_if_cell_padding_on;\n }\n }\n return zoom;\n }\n\n public getHorzZoomToFit(width: number, ids: ColumnId[]) {\n ids = ids || [];\n if (ids.length === 0) {\n return 1;\n }\n const id_to_index_map = this.getVisibleIdToIndexMap();\n const indexes = ids.map(function(id) {\n return id_to_index_map[id];\n });\n let max = Number.NEGATIVE_INFINITY;\n let min = Number.POSITIVE_INFINITY;\n for (let i = 0; i < indexes.length; i++) {\n max = Math.max(indexes[i], max);\n min = Math.min(indexes[i], min);\n }\n return this.getHorzZoomToFitCols(width, min, max + 1);\n }\n\n public getMinHorzZoom() {\n return Math.min(MIN_ZOOM_PIXELS / this.getOncoprintWidth(true), 1);\n }\n\n public getMinVertZoom() {\n // Can't zoom to be smaller than max height\n // That zoom would be z*this.getOncoprintHeight(true) = max_height\n if (this.max_height < Number.POSITIVE_INFINITY) {\n return this.max_height / this.getOncoprintHeight(true);\n } else {\n // if no max height, then cant vert zoom\n return 1;\n }\n }\n\n public setHorzScroll(s: number) {\n this.horz_scroll = Math.max(0, s);\n return this.horz_scroll;\n }\n public setVertScroll(s: number) {\n this.vert_scroll = Math.max(0, s);\n return this.vert_scroll;\n }\n public setScroll(h: number, v: number) {\n this.setHorzScroll(h);\n this.setVertScroll(v);\n }\n public getHorzScroll() {\n return this.horz_scroll;\n }\n public getVertScroll() {\n return this.vert_scroll;\n }\n public setZoom(zoom_x: number, zoom_y: number) {\n this.setHorzZoom(zoom_x);\n this.setVertZoom(zoom_y);\n }\n private setCellPaddingOffBecauseOfZoom(val: boolean) {\n this.cell_padding_off_because_of_zoom = val;\n this.column_left.update();\n }\n public setHorzZoom(z: number) {\n const min_zoom = this.getMinHorzZoom();\n this.horz_zoom = clamp(z, min_zoom, 1);\n this.column_left.update();\n\n if (\n this.getCellWidth() < this.cell_padding_off_cell_width_threshold &&\n !this.cell_padding_off_because_of_zoom\n ) {\n this.setCellPaddingOffBecauseOfZoom(true);\n } else if (\n this.getCellWidth() >= this.cell_padding_off_cell_width_threshold &&\n this.cell_padding_off_because_of_zoom\n ) {\n this.setCellPaddingOffBecauseOfZoom(false);\n }\n return this.horz_zoom;\n }\n\n public getVertZoom() {\n return this.vert_zoom;\n }\n\n public setVertZoom(z: number) {\n const min_zoom = this.getMinVertZoom();\n this.vert_zoom = clamp(z, min_zoom, 1);\n this.track_tops.update();\n return this.vert_zoom;\n }\n\n public setShowTrackLabels(s: boolean) {\n this.show_track_labels = s;\n }\n\n public getShowTrackLabels() {\n return this.show_track_labels;\n }\n\n public hideTrackLegends(track_ids: TrackId[]) {\n track_ids = [].concat(track_ids);\n for (let i = 0; i < track_ids.length; i++) {\n this.getRuleSet(track_ids[i]).exclude_from_legend = true;\n }\n }\n\n public showTrackLegends(track_ids: TrackId[]) {\n track_ids = [].concat(track_ids);\n for (let i = 0; i < track_ids.length; i++) {\n this.getRuleSet(track_ids[i]).exclude_from_legend = false;\n }\n }\n\n private clearTrackActiveRules(track_id: TrackId) {\n const rule_set_id = this.track_rule_set_id[track_id];\n const track_active_rules = this.track_active_rules[track_id];\n const rule_set_active_rules = this.rule_set_active_rules[rule_set_id];\n\n const track_active_rule_ids = Object.keys(track_active_rules).map(x =>\n parseInt(x, 10)\n );\n for (let i = 0; i < track_active_rule_ids.length; i++) {\n const rule_id = track_active_rule_ids[i];\n if (rule_set_active_rules.hasOwnProperty(rule_id)) {\n rule_set_active_rules[rule_id] -= 1;\n if (rule_set_active_rules[rule_id] <= 0) {\n delete rule_set_active_rules[rule_id];\n }\n }\n }\n this.track_active_rules[track_id] = {};\n }\n\n private setTrackActiveRules(track_id: TrackId, active_rules: ActiveRules) {\n this.clearTrackActiveRules(track_id);\n this.track_active_rules[track_id] = active_rules;\n const rule_set_id = this.track_rule_set_id[track_id];\n const rule_set_active_rules = this.rule_set_active_rules[rule_set_id];\n\n const track_active_rule_ids = Object.keys(active_rules).map(x =>\n parseInt(x, 0)\n );\n for (let i = 0; i < track_active_rule_ids.length; i++) {\n const rule_id = track_active_rule_ids[i];\n rule_set_active_rules[rule_id] =\n rule_set_active_rules[rule_id] || 0;\n rule_set_active_rules[rule_id] += 1;\n }\n }\n\n public getTrackUniversalShapes(\n track_id: TrackId,\n use_base_size: boolean\n ): ComputedShapeParams[] {\n const ruleSet = this.getRuleSet(track_id);\n const spacing = this.getTrackHasColumnSpacing(track_id);\n const width =\n this.getCellWidth(use_base_size) +\n (!spacing ? this.getCellPadding(use_base_size, true) : 0);\n const height = this.getCellHeight(track_id, use_base_size);\n\n return ruleSet.getUniversalShapes(width, height);\n }\n\n public getSpecificShapesForData(\n track_id: TrackId,\n use_base_size: boolean\n ): IdentifiedShapeList[] {\n const active_rules = {};\n const data = this.getTrackData(track_id);\n const id_key = this.getTrackDataIdKey(track_id);\n const spacing = this.getTrackHasColumnSpacing(track_id);\n const width =\n this.getCellWidth(use_base_size) +\n (!spacing ? this.getCellPadding(use_base_size, true) : 0);\n const shapes = this.getRuleSet(track_id).getSpecificShapesForDatum(\n data,\n width,\n this.getCellHeight(track_id, use_base_size),\n active_rules,\n id_key,\n this.getTrackImportantIds(track_id)\n );\n\n this.setTrackActiveRules(track_id, active_rules);\n\n return shapes.map(function(\n shape_list: ComputedShapeParams[],\n index: number\n ) {\n return {\n id: data[index][id_key],\n shape_list: shape_list,\n };\n });\n }\n\n public getActiveRules(rule_set_id: RuleSetId) {\n const rule_set_active_rules = this.rule_set_active_rules[rule_set_id];\n if (rule_set_active_rules) {\n return this.rule_sets[rule_set_id]\n .getSpecificRulesForDatum()\n .filter(function(rule_with_id: RuleWithId) {\n return !!rule_set_active_rules[rule_with_id.id];\n });\n } else {\n return [];\n }\n }\n\n public setTrackImportantIds(track_id: TrackId, ids?: ColumnId[]) {\n if (!ids) {\n this.track_important_ids[track_id] = undefined;\n } else {\n this.track_important_ids[track_id] = ids.reduce(function(\n map: ColumnProp<boolean>,\n next_id: ColumnId\n ) {\n map[next_id] = true;\n return map;\n },\n {});\n }\n }\n\n public getTrackImportantIds(track_id: TrackId) {\n return this.track_important_ids[track_id];\n }\n\n public getRuleSets() {\n // return rule sets, in track group legend order\n const self = this;\n const legend_order = this.getTrackGroupLegendOrder();\n const used_track_groups: { [trackGroupIndex: number]: boolean } = {};\n const track_groups = this.getTrackGroups();\n const sorted_track_groups = [];\n for (let i = 0; i < legend_order.length; i++) {\n // add track groups in legend order\n used_track_groups[legend_order[i]] = true;\n if (track_groups[legend_order[i]]) {\n sorted_track_groups.push(track_groups[legend_order[i]]);\n }\n }\n for (let i = 0; i < track_groups.length; i++) {\n // add groups not in legend order to end\n if (!used_track_groups[i] && track_groups[i]) {\n sorted_track_groups.push(track_groups[i]);\n }\n }\n const sorted_tracks: TrackId[] = sorted_track_groups.reduce(function(\n acc: TrackId[],\n next\n ) {\n return acc.concat(next.tracks);\n },\n []);\n const rule_set_ids: number[] = sorted_tracks.map(function(\n track_id: TrackId\n ) {\n return self.track_rule_set_id[track_id];\n });\n const unique_rule_set_ids = arrayUnique(\n rule_set_ids.map(x => x.toString())\n );\n return unique_rule_set_ids.map(function(rule_set_id) {\n return self.rule_sets[parseInt(rule_set_id, 10)];\n });\n }\n\n public getTrackHasColumnSpacing(track_id: TrackId) {\n return !!this.track_has_column_spacing[track_id];\n }\n\n public getGapSize() {\n return this.getCellWidth(true);\n }\n\n public getCellWidth(base?: boolean) {\n return this.cell_width * (base ? 1 : this.horz_zoom);\n }\n\n public getCellHeight(track_id: TrackId, base?: boolean) {\n return this.cell_height[track_id] * (base ? 1 : this.vert_zoom);\n }\n\n public getTrackInfo(track_id: TrackId) {\n return this.track_info[track_id];\n }\n\n public setTrackInfo(track_id: TrackId, msg: string) {\n this.track_info[track_id] = msg;\n }\n\n public getTrackHeight(track_id: TrackId, base?: boolean) {\n return (\n this.getCellHeight(track_id, base) +\n 2 * this.getTrackPadding(track_id, base)\n );\n }\n\n public getTrackPadding(track_id: TrackId, base?: boolean) {\n return this.track_padding[track_id] * (base ? 1 : this.vert_zoom);\n }\n public getBottomPadding() {\n return this.bottom_padding;\n }\n public getTrackSortDirection(track_id: TrackId) {\n return this.track_sort_direction[track_id];\n }\n public setTrackSortDirection(\n track_id: TrackId,\n dir: TrackSortDirection,\n no_callback?: boolean\n ) {\n // see above for dir options\n this.track_sort_direction[track_id] = dir;\n if (!no_callback) {\n this.track_sort_direction_change_callback[track_id](track_id, dir);\n }\n this.precomputed_comparator.update(this, track_id);\n }\n public resetSortableTracksSortDirection(no_callback?: boolean) {\n const allTracks = this.getTracks();\n for (const trackId of allTracks) {\n if (this.isTrackSortDirectionChangeable(trackId)) {\n this.setTrackSortDirection(trackId, 0, no_callback);\n }\n }\n }\n\n public setCellPaddingOn(cell_padding_on: boolean) {\n this.cell_padding_on = cell_padding_on;\n this.column_left.update();\n }\n public getIdOrder(all?: boolean) {\n if (all) {\n return this.id_order; // TODO: should be read-only\n } else {\n return this.visible_id_order.get();\n }\n }\n public getClosestColumnIndexToLeft(\n left: number,\n zoomed?: boolean,\n roundUp?: boolean\n ) {\n const idToLeft = zoomed\n ? this.getZoomedColumnLeft()\n : this.getColumnLeft();\n const ids = this.getIdOrder();\n const lastId = ids[ids.length - 1];\n if (left > idToLeft[lastId] + this.getCellWidth()) {\n return ids.length;\n } else if (left < idToLeft[ids[0]]) {\n return 0;\n } else {\n const index = binarysearch(ids, left, id => idToLeft[id], true);\n const id = ids[index];\n const columnLeft = idToLeft[id];\n if (roundUp && left !== columnLeft) {\n return index + 1;\n } else {\n return index;\n }\n }\n }\n\n public getIdToIndexMap() {\n return this.id_to_index.get();\n }\n public getVisibleIdToIndexMap() {\n return this.visible_id_to_index.get();\n }\n\n public getHiddenIds() {\n const hidden_ids = this.hidden_ids;\n return this.id_order.filter(function(id) {\n return !!hidden_ids[id];\n });\n }\n\n public isSortAffected(\n modified_ids: TrackId | TrackId[],\n group_or_track: 'track' | 'group'\n ) {\n modified_ids = [].concat(modified_ids);\n let group_indexes;\n const self = this;\n if (group_or_track === 'track') {\n group_indexes = modified_ids.map(function(id) {\n return self.getContainingTrackGroupIndex(id);\n });\n } else {\n group_indexes = modified_ids;\n }\n return (\n this.sort_config.type !== 'cluster' ||\n group_indexes.indexOf(this.sort_config.track_group_index) > -1\n );\n }\n\n public setIdOrder(ids: ColumnId[]) {\n this.id_order = ids.slice();\n Object.freeze(this.id_order);\n this.id_to_index.update();\n this.visible_id_order.update(this);\n this.column_left.update();\n }\n\n public hideIds(to_hide: ColumnId[], show_others?: boolean) {\n if (show_others) {\n this.hidden_ids = {};\n }\n for (let j = 0, len = to_hide.length; j < len; j++) {\n this.hidden_ids[to_hide[j]] = true;\n }\n this.visible_id_order.update(this);\n this.column_left.update();\n }\n\n public setHighlightedTracks(track_ids: TrackId[]) {\n this.highlighted_tracks = track_ids;\n }\n\n public getHighlightedTracks() {\n const realTracks = _.keyBy(this.getTracks());\n return this.highlighted_tracks.filter(trackId => trackId in realTracks);\n }\n\n public setHighlightedIds(ids: ColumnId[]) {\n this.highlighted_ids = ids;\n }\n\n public getVisibleHighlightedIds() {\n const visibleIds = this.getVisibleIdToIndexMap();\n return this.highlighted_ids.filter(uid => uid in visibleIds);\n }\n\n public restoreClusteredTrackGroupOrder() {\n if (\n this.sort_config.type === 'cluster' &&\n this.unclustered_track_group_order\n ) {\n const trackGroupIndex = this.sort_config.track_group_index;\n this.setTrackGroupOrder(\n trackGroupIndex,\n this.unclustered_track_group_order\n );\n }\n this.unclustered_track_group_order = undefined;\n }\n\n public setTrackGroupOrder(index: TrackGroupIndex, track_order: TrackId[]) {\n this.track_groups[index].tracks = track_order;\n\n this.track_tops.update();\n }\n\n public moveTrackGroup(\n from_index: TrackGroupIndex,\n to_index: TrackGroupIndex\n ) {\n const new_groups = [];\n const new_headers = [];\n const group_to_move = this.track_groups[from_index];\n for (let i = 0; i < this.track_groups.length; i++) {\n if (i !== from_index && i !== to_index) {\n new_groups.push(this.track_groups[i]);\n }\n if (i === to_index) {\n new_groups.push(group_to_move);\n }\n }\n this.track_groups = new_groups;\n this.track_tops.update();\n return this.track_groups;\n }\n\n public async addTracks(params_list: LibraryTrackSpec<Datum>[]) {\n for (let i = 0; i < params_list.length; i++) {\n const params = params_list[i];\n this.addTrack(params);\n }\n if (this.rendering_suppressed_depth === 0) {\n if (this.keep_sorted) {\n await this.sort();\n }\n }\n this.track_tops.update();\n }\n\n private addTrack(params: LibraryTrackSpec<Datum>) {\n const track_id = params.track_id;\n this.$track_info_tooltip_elt[track_id] = params.$track_info_tooltip_elt;\n this.track_custom_options[track_id] = ifndef(\n params.custom_track_options,\n []\n );\n this.track_label[track_id] = ifndef(params.label, 'Label');\n this.track_sublabel[track_id] = ifndef(params.sublabel, '');\n this.track_label_color[track_id] = ifndef(\n params.track_label_color,\n 'black'\n );\n this.track_label_circle_color[track_id] =\n params.track_label_circle_color;\n this.track_label_font_weight[track_id] = params.track_label_font_weight;\n this.track_label_left_padding[track_id] = ifndef(\n params.track_label_left_padding,\n 0\n );\n this.track_link_url[track_id] = ifndef(params.link_url, null);\n this.track_description[track_id] = ifndef(params.description, '');\n this.cell_height[track_id] = ifndef(params.cell_height, 23);\n this.track_padding[track_id] = ifndef(params.track_padding, 5);\n this.track_has_column_spacing[track_id] = ifndef(\n params.has_column_spacing,\n true\n );\n\n this.track_tooltip_fn[track_id] = ifndef(params.tooltipFn, function(d) {\n return d + '';\n });\n this.track_movable[track_id] = ifndef(params.movable, true);\n this.track_removable[track_id] = ifndef(params.removable, false);\n this.track_remove_callback[track_id] = ifndef(\n params.removeCallback,\n function() {}\n );\n this.track_remove_option_callback[\n track_id\n ] = ifndef(params.onClickRemoveInTrackMenu, function() {});\n\n if (typeof params.expandCallback !== 'undefined') {\n this.track_expand_callback[track_id] = params.expandCallback;\n this.track_expansion_enabled[track_id] = true;\n }\n if (typeof params.expandButtonTextGetter !== 'undefined') {\n this.track_expand_button_getter[track_id] =\n params.expandButtonTextGetter;\n }\n\n this.track_sort_direction[track_id] = ifndef(\n params.init_sort_direction,\n 1\n );\n\n this.track_can_show_gaps[track_id] = ifndef(\n params.track_can_show_gaps,\n false\n );\n\n const trackShowGaps = ifndef(params.show_gaps_on_init, false);\n this.track_show_gaps[track_id] = trackShowGaps;\n const trackNotSorted = this.track_sort_direction[track_id] === 0;\n if (trackShowGaps && trackNotSorted) {\n this.track_sort_direction[track_id] = 1;\n }\n\n this.track_sort_cmp_fn[track_id] = params.sortCmpFn;\n\n this.track_sort_direction_changeable[track_id] = ifndef(\n params.sort_direction_changeable,\n false\n );\n this.track_sort_direction_change_callback[\n track_id\n ] = ifndef(params.onSortDirectionChange, function() {});\n this.track_gap_change_callback[track_id] = ifndef(\n params.onGapChange,\n function() {}\n );\n this.track_data[track_id] = ifndef(params.data, []);\n this.track_data_id_key[track_id] = ifndef(params.data_id_key, 'id');\n\n this.track_info[track_id] = ifndef(params.track_info, '');\n\n if (typeof params.html_label !== 'undefined') {\n this.track_html_label[track_id] = params.html_label;\n }\n\n if (typeof params.rule_set !== 'undefined') {\n this.rule_sets[params.rule_set.rule_set_id] = params.rule_set;\n this.rule_set_active_rules[params.rule_set.rule_set_id] = {};\n this.track_rule_set_id[track_id] = params.rule_set.rule_set_id;\n }\n this.track_active_rules[track_id] = {};\n\n if (params.important_ids) {\n this.setTrackImportantIds(track_id, params.important_ids);\n }\n\n params.target_group = ifndef(params.target_group, 0);\n this.ensureTrackGroupExists(params.target_group);\n\n // add track to target group\n const group_arrays = [this.track_groups[params.target_group].tracks];\n if (\n this.sort_config.type === 'cluster' &&\n this.sort_config.track_group_index === params.target_group\n ) {\n // if target group is clustered, also add track to unclustered order\n group_arrays.push(this.unclustered_track_group_order);\n }\n for (const group_array of group_arrays) {\n const target_index =\n params.expansion_of !== undefined\n ? group_array.indexOf(\n this.getLastExpansion(params.expansion_of)\n ) + 1\n : group_array.length;\n group_array.splice(target_index, 0, track_id);\n }\n\n if (params.expansion_of !== undefined) {\n if (\n !this.track_expansion_tracks.hasOwnProperty(params.expansion_of)\n ) {\n this.track_expansion_tracks[params.expansion_of] = [];\n }\n if (\n this.track_expansion_tracks[params.expansion_of].indexOf(\n track_id\n ) !== -1\n ) {\n throw new Error('Illegal state: duplicate expansion track ID');\n }\n this.track_expansion_parent[track_id] = params.expansion_of;\n this.track_expansion_tracks[params.expansion_of].push(track_id);\n }\n\n this.track_id_to_datum.update(this, track_id);\n this.track_present_ids.update(this, track_id);\n this.precomputed_comparator.update(this, track_id);\n }\n\n public getAllIds() {\n return Object.keys(this.present_ids.get());\n }\n\n public async releaseRendering() {\n if (this.keep_sorted) {\n await this.sort();\n } else {\n this.setIdOrder(Object.keys(this.present_ids.get()));\n }\n this.track_tops.update();\n }\n\n private ensureTrackGroupExists(index: TrackGroupIndex) {\n while (index >= this.track_groups.length) {\n this.track_groups.push({ tracks: [] });\n }\n }\n\n // get a reference to the array that stores the order of tracks in\n // the same group\n private _getMajorTrackGroup(\n track_id: TrackId,\n return_index: true\n ): number | null;\n private _getMajorTrackGroup(\n track_id: TrackId,\n return_index?: false\n ): TrackGroup | null;\n private _getMajorTrackGroup(track_id: TrackId, return_index?: boolean) {\n let group;\n let i;\n for (i = 0; i < this.track_groups.length; i++) {\n if (this.track_groups[i].tracks.indexOf(track_id) > -1) {\n group = this.track_groups[i];\n break;\n }\n }\n if (group) {\n return return_index ? i : group;\n } else {\n return null;\n }\n }\n // get an array listing the track IDs that a track can move around\n private _getEffectiveTrackGroupTracks(track_id: TrackId) {\n const self = this;\n let group,\n parent_id = this.track_expansion_parent[track_id];\n if (parent_id === undefined) {\n group = (function(major_group: TrackGroup) {\n return major_group === null\n ? null\n : major_group.tracks.filter(function(sibling_id) {\n return (\n self.track_expansion_parent[sibling_id] ===\n undefined\n );\n });\n })(this._getMajorTrackGroup(track_id) as TrackGroup);\n } else {\n group = this.track_expansion_tracks[parent_id];\n }\n return group ? group.slice() : null;\n }\n\n private isRuleSetUsed(rule_set_id: RuleSetId) {\n let used = false;\n const tracks = this.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n if (this.track_rule_set_id[tracks[i]] === rule_set_id) {\n used = true;\n break;\n }\n }\n return used;\n }\n\n private removeRuleSet(rule_set_id: RuleSetId) {\n delete this.rule_sets[rule_set_id];\n delete this.rule_set_active_rules[rule_set_id];\n }\n\n public removeTrack(track_id: TrackId) {\n const rule_set_id = this.track_rule_set_id[track_id];\n\n // subtract this tracks active rules from usage count,\n // so that we don't show unused rules in the legend\n this.clearTrackActiveRules(track_id);\n\n this.track_remove_callback[track_id](track_id);\n\n delete this.track_data[track_id];\n delete this.track_rule_set_id[track_id];\n delete this.track_label[track_id];\n delete this.track_link_url[track_id];\n delete this.cell_height[track_id];\n delete this.track_padding[track_id];\n delete this.track_data_id_key[track_id];\n delete this.track_tooltip_fn[track_id];\n delete this.track_movable[track_id];\n delete this.track_removable[track_id];\n delete this.track_remove_callback[track_id];\n delete this.track_sort_cmp_fn[track_id];\n delete this.track_sort_direction_changeable[track_id];\n delete this.track_sort_direction[track_id];\n delete this.track_info[track_id];\n delete this.track_has_column_spacing[track_id];\n delete this.track_expansion_enabled[track_id];\n delete this.track_expand_callback[track_id];\n delete this.track_expand_button_getter[track_id];\n delete this.track_expansion_tracks[track_id];\n delete this.track_label_circle_color[track_id];\n delete this.track_label_font_weight[track_id];\n delete this.track_label_left_padding[track_id];\n\n const containing_track_group = this._getMajorTrackGroup(\n track_id\n ) as TrackGroup;\n if (containing_track_group !== null) {\n containing_track_group.tracks.splice(\n containing_track_group.tracks.indexOf(track_id),\n 1\n );\n }\n // remove listing of the track as an expansion of its parent track\n const expansion_group = this.track_expansion_tracks[\n this.track_expansion_parent[track_id]\n ];\n if (expansion_group) {\n expansion_group.splice(expansion_group.indexOf(track_id), 1);\n }\n // remove this track from unclustered order\n if (\n this.unclustered_track_group_order &&\n this.unclustered_track_group_order.indexOf(track_id) > -1\n ) {\n this.unclustered_track_group_order.splice(\n this.unclustered_track_group_order.indexOf(track_id),\n 1\n );\n }\n delete this.track_expansion_parent[track_id];\n this.track_tops.update();\n this.track_present_ids.update(this, track_id);\n this.track_id_to_datum.update(this, track_id);\n this.ids_after_a_gap.update(this);\n this.setIdOrder(Object.keys(this.present_ids.get()));\n\n // delete rule set if its now unused\n const rule_set_used = this.isRuleSetUsed(rule_set_id);\n if (!rule_set_used) {\n this.removeRuleSet(rule_set_id);\n }\n }\n\n public getOverlappingCells(\n x: number,\n y: number\n ): TrackOverlappingCells | null {\n // First, see if it's in a column\n const id_order = this.getIdOrder();\n const zoomed_column_left = this.getZoomedColumnLeft() as ColumnProp<\n number\n >;\n // this gets the nearest lower index\n const nearest_id_index = binarysearch(\n id_order,\n x,\n function(id) {\n return zoomed_column_left[id];\n },\n true\n );\n if (nearest_id_index === -1) {\n return null;\n }\n\n // Next, see if it's in a track\n const tracks = this.getTracks();\n const cell_tops = this.getCellTops() as TrackProp<number>;\n const nearest_track_index = binarysearch(\n tracks,\n y,\n function(track) {\n return cell_tops[track];\n },\n true\n );\n if (nearest_track_index === -1) {\n return null;\n }\n const nearest_track = tracks[nearest_track_index];\n if (y >= cell_tops[nearest_track] + this.getCellHeight(nearest_track)) {\n // we know y is past the top of the track (>= cell_tops[nearest_track]), so this checks if y is past the bottom of the track\n return null;\n }\n\n // At this point, we know y is inside a track\n\n // Finally, return all ids within 1 px of x to the right\n const ids = [];\n let hitzone_width = this.getCellWidth();\n if (!this.getTrackHasColumnSpacing(nearest_track)) {\n hitzone_width += this.getCellPadding();\n }\n for (let i = nearest_id_index; i < id_order.length; i++) {\n // if hitzone of cell touches the pixel [x,x+1), then include it\n if (\n doesCellIntersectPixel(\n [\n zoomed_column_left[id_order[i]],\n zoomed_column_left[id_order[i]] + hitzone_width,\n ],\n x\n )\n ) {\n ids.push(id_order[i]);\n } else if (zoomed_column_left[id_order[i]] > x + 1) {\n break;\n }\n }\n if (ids.length > 0) {\n return {\n ids: ids,\n track: nearest_track,\n top: cell_tops[nearest_track],\n left: zoomed_column_left[ids[0]],\n };\n }\n return null;\n }\n\n public getTrackDatum(track_id: TrackId, id: ColumnId) {\n const datumById = this.track_id_to_datum.get()[track_id];\n if (!datumById) {\n return null;\n }\n\n return datumById[id] || null;\n }\n\n public getTrackTops(): TrackProp<number>;\n public getTrackTops(desired_track_id: TrackId): number;\n public getTrackTops(desired_track_id?: TrackId) {\n if (typeof desired_track_id === 'undefined') {\n return copyShallowObject(this.track_tops.get());\n } else {\n return this.track_tops.get()[desired_track_id];\n }\n }\n\n public getZoomedTrackTops(): TrackProp<number>;\n public getZoomedTrackTops(desired_track_id: TrackId): number;\n public getZoomedTrackTops(desired_track_id?: TrackId) {\n if (typeof desired_track_id === 'undefined') {\n return copyShallowObject(this.track_tops_zoomed.get());\n } else {\n return this.track_tops_zoomed.get()[desired_track_id];\n }\n }\n\n public getZoomedHeaderTops(): TrackGroupProp<number>;\n public getZoomedHeaderTops(track_group_index: TrackGroupIndex): number;\n public getZoomedHeaderTops(track_group_index?: TrackGroupIndex) {\n if (typeof track_group_index === 'undefined') {\n return copyShallowObject(this.header_tops_zoomed.get());\n } else {\n return this.header_tops_zoomed.get()[track_group_index];\n }\n }\n\n public getCellTops(\n desired_track_id?: undefined,\n base?: boolean\n ): TrackProp<number>;\n public getCellTops(desired_track_id: TrackId, base?: boolean): number;\n public getCellTops(desired_track_id?: TrackId, base?: boolean) {\n if (typeof desired_track_id === 'undefined') {\n return copyShallowObject(\n (base ? this.cell_tops : this.cell_tops_zoomed).get()\n );\n } else {\n return (base ? this.cell_tops : this.cell_tops_zoomed).get()[\n desired_track_id\n ];\n }\n }\n\n public getLabelTops(): TrackProp<number>;\n public getLabelTops(desired_track_id: TrackId): number;\n public getLabelTops(desired_track_id?: TrackId, base?: boolean) {\n if (typeof desired_track_id === 'undefined') {\n return copyShallowObject(\n (base ? this.label_tops : this.label_tops_zoomed).get()\n );\n } else {\n return (base ? this.label_tops : this.label_tops_zoomed).get()[\n desired_track_id\n ];\n }\n }\n\n public getContainingTrackGroup(track_id: TrackId) {\n return this._getEffectiveTrackGroupTracks(track_id);\n }\n\n public getContainingTrackGroupIndex(track_id: TrackId) {\n return this._getMajorTrackGroup(track_id, true);\n }\n\n public getTrackGroups() {\n // TODO: make read-only\n return this.track_groups;\n }\n\n public getTracks() {\n const ret = [];\n for (let i = 0; i < this.track_groups.length; i++) {\n ret.push(...this.track_groups[i].tracks);\n }\n return ret;\n }\n\n public getColumnLeft(): ColumnProp<number>;\n public getColumnLeft(id: ColumnId): number;\n public getColumnLeft(id?: ColumnId) {\n if (typeof id === 'undefined') {\n return this.column_left.get();\n } else {\n return this.column_left.get()[id];\n }\n }\n\n public getColumnLeftNoPadding(): ColumnProp<number>;\n public getColumnLeftNoPadding(id: ColumnId): number;\n public getColumnLeftNoPadding(id?: ColumnId) {\n if (typeof id === 'undefined') {\n return this.column_left_no_padding.get();\n } else {\n return this.column_left_no_padding.get()[id];\n }\n }\n\n public getZoomedColumnLeft(): ColumnProp<number>;\n public getZoomedColumnLeft(id: ColumnId): number;\n public getZoomedColumnLeft(id?: ColumnId) {\n if (typeof id === 'undefined') {\n return this.zoomed_column_left.get();\n } else {\n return this.zoomed_column_left.get()[id];\n }\n }\n\n public getOncoprintHeight(base?: boolean) {\n const tracks = this.getTracks();\n const last_track = tracks[tracks.length - 1];\n return (\n (base\n ? (this.getTrackTops(last_track) as number)\n : (this.getZoomedTrackTops(last_track) as number)) +\n this.getTrackHeight(last_track, base) +\n this.getBottomPadding()\n );\n }\n\n public getOncoprintWidth(base?: boolean) {\n const idOrder = this.getIdOrder();\n const lastId = idOrder[idOrder.length - 1];\n const lastIdLeft = base\n ? this.getColumnLeft(lastId)\n : this.getZoomedColumnLeft(lastId);\n return lastIdLeft + this.getCellWidth(base) + 1; // this fixes some edge case issues with scrolling\n }\n\n public getOncoprintWidthNoColumnPaddingNoGaps() {\n return this.getIdOrder().length * this.getCellWidth(true);\n }\n\n public getColumnLabels() {\n return this.column_labels;\n }\n\n public setColumnLabels(labels: ColumnProp<ColumnLabel>) {\n this.column_labels = labels;\n }\n\n public moveTrack(track_id: TrackId, new_previous_track: TrackId) {\n function moveContiguousValues<T>(\n uniqArray: T[],\n first_value: T,\n last_value: T,\n new_predecessor: T\n ) {\n const old_start_index = uniqArray.indexOf(first_value),\n old_end_index = uniqArray.indexOf(last_value);\n const values = uniqArray.slice(old_start_index, old_end_index + 1);\n uniqArray.splice(old_start_index, values.length);\n const new_position =\n new_predecessor === null\n ? 0\n : uniqArray.indexOf(new_predecessor) + 1;\n uniqArray.splice\n .bind(uniqArray, new_position, 0)\n .apply(null, values);\n }\n\n const track_group = this._getMajorTrackGroup(track_id) as TrackGroup,\n expansion_parent = this.track_expansion_parent[track_id];\n\n let flat_previous_track;\n\n if (track_group !== null) {\n // if an expansion track moves above all other tracks it can,\n // place it directly below its expansion parent\n if (expansion_parent !== undefined && new_previous_track === null) {\n flat_previous_track = expansion_parent;\n // otherwise, place the track under (the last expansion track of)\n // its sibling\n } else {\n flat_previous_track = this.getLastExpansion(new_previous_track);\n }\n moveContiguousValues(\n track_group.tracks,\n track_id,\n this.getLastExpansion(track_id),\n flat_previous_track\n );\n }\n\n // keep the order of expansion siblings up-to-date as well\n if (this.track_expansion_parent[track_id] !== undefined) {\n moveContiguousValues(\n this.track_expansion_tracks[expansion_parent],\n track_id,\n track_id,\n new_previous_track\n );\n }\n\n this.track_tops.update();\n }\n\n public getTrackLabel(track_id: TrackId) {\n return this.track_label[track_id];\n }\n\n public getTrackSublabel(track_id: TrackId) {\n return this.track_sublabel[track_id];\n }\n\n public getShowTrackSublabels() {\n return this.show_track_sublabels;\n }\n\n public setShowTrackSublabels(show: boolean) {\n return (this.show_track_sublabels = show);\n }\n\n public getTrackLabelColor(track_id: TrackId) {\n return this.track_label_color[track_id];\n }\n\n public getTrackLabelCircleColor(track_id: TrackId) {\n return this.track_label_circle_color[track_id];\n }\n\n public getTrackLabelFontWeight(track_id: TrackId) {\n return this.track_label_font_weight[track_id];\n }\n\n public getTrackLabelLeftPadding(track_id: TrackId) {\n return this.track_label_left_padding[track_id];\n }\n\n public getOptionalHtmlTrackLabel(track_id: TrackId) {\n return this.track_html_label[track_id];\n }\n\n public getTrackLinkUrl(track_id: TrackId) {\n return this.track_link_url[track_id];\n }\n\n public getTrackDescription(track_id: TrackId) {\n return this.track_description[track_id];\n }\n\n public getTrackTooltipFn(track_id: TrackId) {\n return this.track_tooltip_fn[track_id];\n }\n public setTrackTooltipFn(\n track_id: TrackId,\n tooltipFn: TrackTooltipFn<Datum>\n ) {\n this.track_tooltip_fn[track_id] = tooltipFn;\n }\n\n public getTrackDataIdKey(track_id: TrackId) {\n return this.track_data_id_key[track_id];\n }\n\n public getTrackGroupPadding(base?: boolean) {\n return this.track_group_padding * (base ? 1 : this.vert_zoom);\n }\n\n public isTrackRemovable(track_id: TrackId) {\n return this.track_removable[track_id];\n }\n\n public getTrackRemoveOptionCallback(track_id: TrackId) {\n return this.track_remove_option_callback[track_id];\n }\n\n public isTrackSortDirectionChangeable(track_id: TrackId) {\n return this.track_sort_direction_changeable[track_id];\n }\n\n public isTrackExpandable(track_id: TrackId) {\n // return true if the flag is defined and true\n return Boolean(this.track_expansion_enabled[track_id]);\n }\n\n public expandTrack(track_id: TrackId) {\n return this.track_expand_callback[track_id](track_id);\n }\n\n public disableTrackExpansion(track_id: TrackId) {\n this.track_expansion_enabled[track_id] = false;\n }\n\n public enableTrackExpansion(track_id: TrackId) {\n if (!this.track_expand_callback.hasOwnProperty(track_id)) {\n throw new Error(\"Track '\" + track_id + \"' has no expandCallback\");\n }\n this.track_expansion_enabled[track_id] = true;\n }\n\n public isTrackExpanded(track_id: TrackId) {\n return (\n this.track_expansion_tracks.hasOwnProperty(track_id) &&\n this.track_expansion_tracks[track_id].length > 0\n );\n }\n\n public getExpandButtonText(track_id: TrackId) {\n const self = this;\n const getExpandButtonFunction = function(track_id: TrackId) {\n return (\n self.track_expand_button_getter[track_id] ||\n function(is_expanded) {\n return is_expanded ? 'Expand more' : 'Expand';\n }\n );\n };\n return getExpandButtonFunction(track_id)(\n this.isTrackExpanded(track_id)\n );\n }\n\n /**\n * Checks if one track is the expansion of another\n *\n * @param {number} expansion_track_id - the ID of the track to check\n * @param {number} set_track_id - the ID of the track it may be an expansion of\n */\n public isExpansionOf(expansion_track_id: TrackId, set_track_id: TrackId) {\n return (\n this.track_expansion_tracks.hasOwnProperty(set_track_id) &&\n this.track_expansion_tracks[set_track_id].indexOf(\n expansion_track_id\n ) !== -1\n );\n }\n\n /**\n * Finds the bottom-most track in a track's expansion group\n *\n * @param track_id - the ID of the track to start from\n * @returns the ID of its last expansion, or the unchanged param if none\n */\n public getLastExpansion(track_id: TrackId) {\n let direct_children = this.track_expansion_tracks[track_id];\n while (direct_children && direct_children.length) {\n track_id = direct_children[direct_children.length - 1];\n direct_children = this.track_expansion_tracks[track_id];\n }\n return track_id;\n }\n\n public getTrackCustomOptions(track_id: TrackId) {\n return this.track_custom_options[track_id];\n }\n\n public setTrackCustomOptions(\n track_id: TrackId,\n options: CustomTrackOption[] | undefined\n ) {\n this.track_custom_options[track_id] = options;\n }\n\n public setTrackInfoTooltip(\n track_id: TrackId,\n $tooltip_elt: JQuery | undefined\n ) {\n this.$track_info_tooltip_elt[track_id] = $tooltip_elt;\n }\n\n public $getTrackInfoTooltip(track_id: TrackId) {\n return this.$track_info_tooltip_elt[track_id];\n }\n\n public getRuleSet(track_id: TrackId) {\n return this.rule_sets[this.track_rule_set_id[track_id]];\n }\n\n public shareRuleSet(source_track_id: TrackId, target_track_id: TrackId) {\n this.setTrackActiveRules(target_track_id, {});\n\n const old_rule_set_id = this.track_rule_set_id[target_track_id];\n this.track_rule_set_id[target_track_id] = this.track_rule_set_id[\n source_track_id\n ];\n if (!this.isRuleSetUsed(old_rule_set_id)) {\n this.removeRuleSet(old_rule_set_id);\n }\n }\n\n public setRuleSet(track_id: TrackId, rule_set: RuleSet) {\n this.setTrackActiveRules(track_id, {});\n\n const curr_rule_set_id = this.track_rule_set_id[track_id];\n this.rule_sets[rule_set.rule_set_id] = rule_set;\n this.rule_set_active_rules[rule_set.rule_set_id] = {};\n this.track_rule_set_id[track_id] = rule_set.rule_set_id;\n\n const rule_set_used = this.isRuleSetUsed(curr_rule_set_id);\n if (!rule_set_used) {\n this.removeRuleSet(curr_rule_set_id);\n }\n }\n\n public getTrackSortComparator(track_id: TrackId) {\n return this.track_sort_cmp_fn[track_id];\n }\n\n public setTrackSortComparator(\n track_id: TrackId,\n sortCmpFn: TrackSortSpecification<Datum>\n ) {\n this.track_sort_cmp_fn[track_id] = sortCmpFn;\n this.precomputed_comparator.update(this, track_id);\n }\n\n public getTrackData(track_id: TrackId) {\n return this.track_data[track_id];\n }\n\n public clusterTrackGroup(\n track_group_index: TrackGroupIndex,\n clusterValueFn: (d: Datum) => number\n ): Promise<void | ClusterSortResult> {\n const sort_config_at_call = cloneShallow(this.sort_config);\n // Prepare input\n const self = this;\n //@ts-ignore\n const def = new $.Deferred();\n const cluster_input: ColumnProp<TrackProp<number>> = {};\n\n // Use data from tracks on the same level of expansion as the first one\n // in the track group as input, i.e. the outer level excluding any\n // expansions\n const track_group = this.getTrackGroups()[track_group_index];\n let track_ids: TrackId[] = [];\n if (track_group !== undefined) {\n track_ids =\n this._getEffectiveTrackGroupTracks(track_group.tracks[0]) || [];\n }\n for (let i = 0; i < track_ids.length; i++) {\n const track_id = track_ids[i];\n const data_id_key = this.getTrackDataIdKey(track_id);\n const data = this.getTrackData(track_id);\n for (let j = 0; j < data.length; j++) {\n const id = data[j][data_id_key];\n const value = clusterValueFn(data[j]);\n cluster_input[id] = cluster_input[id] || {};\n cluster_input[id][track_id] = value;\n }\n }\n if (!Object.keys(cluster_input).length) {\n // skip clustering if there's nothing to cluster\n return def.resolve().promise();\n }\n\n // unset sorting by tracks in this group\n /*track_group.forEach(function (track_id) {\n self.setTrackSortDirection(track_id, 0, true);\n });*/\n\n //do hierarchical clustering in background:\n $.when(hclusterColumns(cluster_input), hclusterTracks(cluster_input))\n .then(function(\n columnClusterOrder: CaseItem[],\n trackClusterOrder: EntityItem[]\n ) {\n // cancel if sort config is no longer what it was\n if (!_.isEqual(self.sort_config, sort_config_at_call)) {\n return;\n }\n // set clustered column order\n self.setIdOrder(\n columnClusterOrder.map(function(c) {\n return c.caseId;\n })\n ); // TODO\n // determine clustered row order\n const clustered_track_id_order = trackClusterOrder.map(function(\n entity\n ) {\n // TODO\n return parseInt(entity.entityId, 10);\n });\n // re-insert any expansions below each clustered track\n const full_track_id_order: TrackId[] = [];\n clustered_track_id_order.forEach(function(track_id: TrackId) {\n full_track_id_order.push(track_id);\n Array.prototype.push.apply(\n full_track_id_order,\n self.track_expansion_tracks[track_id] || []\n );\n });\n if (!self.unclustered_track_group_order) {\n // save pre-clustered order if it isn't already saved\n self.unclustered_track_group_order = track_ids;\n }\n def.resolve({\n track_group_index: track_group_index,\n track_id_order: full_track_id_order,\n });\n })\n .fail(function() {\n def.reject();\n });\n return def.promise();\n }\n\n /**\n * Sets the data for an Oncoprint track.\n *\n * @param track_id - the ID that identifies the track\n * @param {Object[]} data - the list of data for the cells\n * @param {string} data_id_key - name of the property of the\n * data objects to use as the (column) key\n */\n public setTrackData(\n track_id: TrackId,\n data: Datum[],\n data_id_key: string & keyof Datum\n ) {\n this.track_data[track_id] = data;\n this.track_data_id_key[track_id] = data_id_key;\n this.track_id_to_datum.update(this, track_id);\n this.track_present_ids.update(this, track_id);\n this.setIdOrder(Object.keys(this.present_ids.get()));\n this.precomputed_comparator.update(this, track_id);\n }\n\n public setTrackGroupLegendOrder(group_order: TrackGroupIndex[]) {\n this.track_group_legend_order = group_order.slice();\n }\n\n public getTrackGroupLegendOrder() {\n return this.track_group_legend_order;\n }\n\n public setTrackGroupSortPriority(priority: TrackGroupIndex[]) {\n this.track_group_sort_priority = priority;\n this.sort();\n }\n private sortAlphabetical() {\n const id_order = this.getIdOrder(true).slice();\n id_order.sort(function(a, b) {\n return a.localeCompare(b);\n });\n this.setIdOrder(id_order);\n }\n private sortByTracks() {\n const track_group_sort_priority = this.track_group_sort_priority;\n const track_groups = this.getTrackGroups();\n let track_groups_in_sort_order: TrackGroup[];\n\n if (track_group_sort_priority.length < track_groups.length) {\n track_groups_in_sort_order = track_groups;\n } else {\n track_groups_in_sort_order = track_group_sort_priority.map(function(\n x\n ) {\n return track_groups[x];\n });\n }\n\n const track_sort_priority: TrackId[] = track_groups_in_sort_order.reduce(\n function(acc: TrackId[], next) {\n return acc.concat(next.tracks);\n },\n []\n );\n\n const precomputed_comparator = this.precomputed_comparator.get();\n function getVector(id: ColumnId) {\n const mandatory_values = [];\n const preferred_values = [];\n for (let i = 0; i < track_sort_priority.length; i++) {\n const sort_value = precomputed_comparator[\n track_sort_priority[i]\n ].getSortValue(id);\n mandatory_values.push(sort_value.mandatory);\n preferred_values.push(sort_value.preferred);\n }\n return mandatory_values.concat(preferred_values);\n }\n\n const ids_with_vectors = this.getAllIds().map(function(id) {\n return {\n id: id,\n vector: getVector(id),\n };\n });\n const order = BucketSort.bucketSort(ids_with_vectors, function(d: {\n id: ColumnId;\n vector: (string | number)[];\n }) {\n return d.vector;\n });\n this.setIdOrder(\n order.map(function(d: {\n id: ColumnId;\n vector: (string | number)[];\n }) {\n return d.id;\n })\n );\n }\n public sort(): Promise<void | ClusterSortResult> {\n //@ts-ignore\n const def = new $.Deferred();\n this.sort_config = this.sort_config || {};\n if (this.sort_config.type === 'alphabetical') {\n this.sortAlphabetical();\n def.resolve();\n } else if (this.sort_config.type === 'order') {\n this.setIdOrder(this.sort_config.order);\n def.resolve();\n } else if (this.sort_config.type === 'cluster') {\n this.clusterTrackGroup(\n this.sort_config.track_group_index,\n this.sort_config.clusterValueFn\n ).then(function(x) {\n def.resolve(x);\n });\n } else {\n this.sortByTracks();\n def.resolve();\n }\n return def.promise();\n }\n\n public setSortConfig(params: SortConfig) {\n if (\n this.sort_config.type === 'cluster' &&\n (params.type !== 'cluster' ||\n params.track_group_index !== this.sort_config.track_group_index)\n ) {\n // restore order of currently clustered track group if it will no longer be clustered\n this.restoreClusteredTrackGroupOrder();\n }\n this.sort_config = params;\n }\n\n public getTrackMovable(track_id: TrackId) {\n return this.track_movable[track_id];\n }\n\n public setTrackMovable(track_id: TrackId, movable: boolean) {\n this.track_movable[track_id] = movable;\n }\n\n public isTrackInClusteredGroup(track_id: TrackId) {\n return (\n this.sort_config.type === 'cluster' &&\n this.sort_config.track_group_index ===\n this.getContainingTrackGroupIndex(track_id)\n );\n }\n}\n","export default function makesvgelement(tag: string, attrs: any) {\n const el = document.createElementNS('http://www.w3.org/2000/svg', tag);\n for (const k in attrs) {\n if (k in attrs) {\n el.setAttribute(k, attrs[k]);\n }\n }\n return el;\n}\n","import { fastParseInt16 } from './utils';\nimport { RGBAColor } from './oncoprintruleset';\n\nexport default function extractrgba(str: string): RGBAColor {\n if (str[0] === '#') {\n // hex, convert to rgba\n return hexToRGBA(str);\n }\n const match = str.match(\n /^[\\s]*rgba\\([\\s]*([0-9.]+)[\\s]*,[\\s]*([0-9.]+)[\\s]*,[\\s]*([0-9.]+)[\\s]*,[\\s]*([0-9.]+)[\\s]*\\)[\\s]*$/\n );\n if (match && match.length === 5) {\n return [\n parseFloat(match[1]) / 255,\n parseFloat(match[2]) / 255,\n parseFloat(match[3]) / 255,\n parseFloat(match[4]),\n ];\n }\n throw `could not extract rgba from ${str}`;\n}\n\nexport function hexToRGBA(str: string): RGBAColor {\n const r = fastParseInt16(str[1] + str[2]);\n const g = fastParseInt16(str[3] + str[4]);\n const b = fastParseInt16(str[5] + str[6]);\n return [r, g, b, 1];\n}\n\nexport function rgbaToHex(rgba: RGBAColor): string {\n let hexR = rgba[0].toString(16);\n let hexG = rgba[1].toString(16);\n let hexB = rgba[2].toString(16);\n if (hexR.length === 1) {\n hexR = '0' + hexR;\n }\n if (hexG.length === 1) {\n hexG = '0' + hexG;\n }\n if (hexB.length === 1) {\n hexB = '0' + hexB;\n }\n return `#${hexR}${hexG}${hexB}`;\n}\n","import makeSVGElement from './makesvgelement';\nimport extractRGBA from './extractrgba';\nimport {\n ComputedEllipseParams,\n ComputedLineParams,\n ComputedRectangleParams,\n ComputedShapeParams,\n ComputedTriangleParams,\n} from './oncoprintshape';\nimport { rgbString } from './utils';\n\nfunction extractColor(str: string) {\n if (str.indexOf('rgb(') > -1) {\n return {\n rgb: str,\n opacity: 1,\n };\n }\n const rgba_arr = extractRGBA(str);\n return {\n rgb:\n 'rgb(' +\n rgba_arr[0] * 255 +\n ',' +\n rgba_arr[1] * 255 +\n ',' +\n rgba_arr[2] * 255 +\n ')',\n opacity: rgba_arr[3],\n };\n}\n\nfunction rectangleToSVG(\n params: ComputedRectangleParams,\n offset_x: number,\n offset_y: number\n) {\n return makeSVGElement('rect', {\n width: params.width,\n height: params.height,\n x: params.x + offset_x,\n y: params.y + offset_y,\n stroke: rgbString(params.stroke),\n 'stroke-opacity': params.stroke[3],\n 'stroke-width': params['stroke-width'],\n fill: rgbString(params.fill),\n 'fill-opacity': params.fill[3],\n });\n}\n\nfunction triangleToSVG(\n params: ComputedTriangleParams,\n offset_x: number,\n offset_y: number\n) {\n return makeSVGElement('polygon', {\n points: [\n [params.x1 + offset_x, params.y1 + offset_y],\n [params.x2 + offset_x, params.y2 + offset_y],\n [params.x3 + offset_x, params.y3 + offset_y],\n ]\n .map(function(a) {\n return a[0] + ',' + a[1];\n })\n .join(' '),\n stroke: rgbString(params.stroke),\n 'stroke-opacity': params.stroke[3],\n 'stroke-width': params['stroke-width'],\n fill: rgbString(params.fill),\n 'fill-opacity': params.fill[3],\n });\n}\n\nfunction ellipseToSVG(\n params: ComputedEllipseParams,\n offset_x: number,\n offset_y: number\n) {\n return makeSVGElement('ellipse', {\n rx: params.width / 2,\n height: params.height / 2,\n cx: params.x + offset_x,\n cy: params.y + offset_y,\n stroke: rgbString(params.stroke),\n 'stroke-opacity': params.stroke[3],\n 'stroke-width': params['stroke-width'],\n fill: rgbString(params.fill),\n 'fill-opacity': params.fill[3],\n });\n}\n\nfunction lineToSVG(\n params: ComputedLineParams,\n offset_x: number,\n offset_y: number\n) {\n return makeSVGElement('line', {\n x1: params.x1 + offset_x,\n y1: params.y1 + offset_y,\n x2: params.x2 + offset_x,\n y2: params.y2 + offset_y,\n stroke: rgbString(params.stroke),\n 'stroke-opacity': params.stroke[3],\n 'stroke-width': params['stroke-width'],\n });\n}\n\nexport default function shapeToSVG(\n oncoprint_shape_computed_params: ComputedShapeParams,\n offset_x: number,\n offset_y: number\n) {\n var type = oncoprint_shape_computed_params.type;\n if (type === 'rectangle') {\n return rectangleToSVG(\n oncoprint_shape_computed_params as ComputedRectangleParams,\n offset_x,\n offset_y\n );\n } else if (type === 'triangle') {\n return triangleToSVG(\n oncoprint_shape_computed_params as ComputedTriangleParams,\n offset_x,\n offset_y\n );\n } else if (type === 'ellipse') {\n return ellipseToSVG(\n oncoprint_shape_computed_params as ComputedEllipseParams,\n offset_x,\n offset_y\n );\n } else if (type === 'line') {\n return lineToSVG(\n oncoprint_shape_computed_params as ComputedLineParams,\n offset_x,\n offset_y\n );\n }\n return undefined;\n}\n","import makeSVGElement from './makesvgelement';\nimport shapeToSVG from './oncoprintshapetosvg';\nimport { ComputedShapeParams } from './oncoprintshape';\nimport { RGBAColor } from './oncoprintruleset';\nimport { rgbString } from './utils';\n\nfunction makeIdCounter() {\n let id = 0;\n return function() {\n id += 1;\n return id;\n };\n}\n\nconst gradientId = makeIdCounter();\n\nexport default {\n text: function(\n content: string,\n x?: number,\n y?: number,\n size?: number,\n family?: string,\n weight?: string,\n alignment_baseline?: string,\n fill?: string,\n text_decoration?: string\n ) {\n size = size || 12;\n var alignment_baseline_y_offset = size;\n if (alignment_baseline === 'middle') {\n alignment_baseline_y_offset = size / 2;\n } else if (alignment_baseline === 'bottom') {\n alignment_baseline_y_offset = 0;\n }\n var elt = makeSVGElement('text', {\n x: x || 0,\n y: (y || 0) + alignment_baseline_y_offset,\n 'font-size': size,\n 'font-family': family || 'serif',\n 'font-weight': weight || 'normal',\n 'text-anchor': 'start',\n fill: fill,\n 'text-decoration': text_decoration,\n });\n elt.textContent = content + '';\n return elt as SVGTextElement;\n },\n group: function(x: number | undefined, y: number | undefined) {\n x = x || 0;\n y = y || 0;\n return makeSVGElement('g', {\n transform: 'translate(' + x + ',' + y + ')',\n }) as SVGGElement;\n },\n svg: function(width: number | undefined, height: number | undefined) {\n return makeSVGElement('svg', {\n width: width || 0,\n height: height || 0,\n }) as SVGSVGElement;\n },\n wrapText: function(in_dom_text_svg_elt: SVGTextElement, width: number) {\n const text = in_dom_text_svg_elt.textContent;\n in_dom_text_svg_elt.textContent = '';\n\n const words = text.split(' ');\n let dy = 0;\n let tspan = makeSVGElement('tspan', {\n x: '0',\n dy: dy,\n }) as SVGTSpanElement;\n in_dom_text_svg_elt.appendChild(tspan);\n\n let curr_tspan_words: string[] = [];\n for (var i = 0; i < words.length; i++) {\n curr_tspan_words.push(words[i]);\n tspan.textContent = curr_tspan_words.join(' ');\n if (tspan.getComputedTextLength() > width) {\n tspan.textContent = curr_tspan_words\n .slice(0, curr_tspan_words.length - 1)\n .join(' ');\n dy = in_dom_text_svg_elt.getBBox().height;\n curr_tspan_words = [words[i]];\n tspan = makeSVGElement('tspan', {\n x: '0',\n dy: dy,\n }) as SVGTSpanElement;\n in_dom_text_svg_elt.appendChild(tspan);\n tspan.textContent = words[i];\n }\n }\n },\n fromShape: function(\n oncoprint_shape_computed_params: ComputedShapeParams,\n offset_x: number,\n offset_y: number\n ) {\n return shapeToSVG(oncoprint_shape_computed_params, offset_x, offset_y);\n },\n polygon: function(points: [number, number][], fill: RGBAColor) {\n return makeSVGElement('polygon', {\n points: points,\n fill: rgbString(fill),\n 'fill-opacity': fill[3],\n }) as SVGPolygonElement;\n },\n rect: function(\n x: number,\n y: number,\n width: number,\n height: number,\n fillSpecification:\n | {\n type: 'rgba';\n value: RGBAColor;\n }\n | {\n type: 'gradientId';\n value: string;\n }\n ) {\n let fill: string;\n let fillOpacity = 1;\n if (fillSpecification.type === 'rgba') {\n fill = rgbString(fillSpecification.value);\n fillOpacity = fillSpecification.value[3];\n } else {\n fill = `url(#${fillSpecification.value})`;\n }\n return makeSVGElement('rect', {\n x: x,\n y: y,\n width: width,\n height: height,\n fill: fill,\n 'fill-opacity': fillOpacity,\n }) as SVGRectElement;\n },\n bgrect: function(width: number, height: number, fill: RGBAColor) {\n return makeSVGElement('rect', {\n width: width,\n height: height,\n fill: rgbString(fill),\n 'fill-opacity': fill[3],\n }) as SVGRectElement;\n },\n path: function(\n points: [number, number][],\n stroke: RGBAColor,\n fill: RGBAColor,\n linearGradient: SVGGradientElement\n ) {\n let pointsStrArray = points.map(function(pt) {\n return pt.join(',');\n });\n pointsStrArray[0] = 'M' + points[0];\n for (var i = 1; i < points.length; i++) {\n pointsStrArray[i] = 'L' + points[i];\n }\n return makeSVGElement('path', {\n d: pointsStrArray.join(' '),\n stroke: linearGradient\n ? 'url(#' + linearGradient.getAttribute('id') + ')'\n : rgbString(stroke),\n 'stroke-opacity': linearGradient ? 0 : stroke[3],\n fill: linearGradient\n ? 'url(#' + linearGradient.getAttribute('id') + ')'\n : rgbString(fill),\n 'fill-opacity': linearGradient ? 1 : fill[3],\n }) as SVGPathElement;\n },\n stop: function(offset: number, color: RGBAColor) {\n return makeSVGElement('stop', {\n offset: offset + '%',\n 'stop-color': rgbString(color),\n 'stop-opacity': color[3],\n }) as SVGStopElement;\n },\n linearGradient: function() {\n return makeSVGElement('linearGradient', {\n id: 'linearGradient' + gradientId(),\n }) as SVGLinearGradientElement;\n },\n defs: function() {\n return makeSVGElement('defs', {}) as SVGDefsElement;\n },\n gradient: function(colorFn: (val: number) => RGBAColor) {\n const gradient = makeSVGElement('linearGradient', {\n id: 'gradient' + gradientId(),\n x1: 0,\n y1: 0,\n x2: 1,\n y2: 0,\n });\n for (let i = 0; i <= 100; i++) {\n gradient.appendChild(this.stop(i, colorFn(i / 100)));\n }\n return gradient as SVGLinearGradientElement;\n },\n};\n","import { ComputedShapeParams, Rectangle } from './oncoprintshape';\nimport { RGBAColor } from './oncoprintruleset';\n\nconst halfsqrt2 = Math.sqrt(2) / 2;\n\nfunction normalizeRGBA(color: RGBAColor): [number, number, number, number] {\n return [color[0], color[1], color[2], color[3] * 255];\n}\n\ntype AddVertexCallback = (\n vertex: [number, number, number],\n color: [number, number, number, number]\n) => void;\n\nfunction rectangleToVertexes(\n params: ComputedShapeParams,\n z_index: number,\n addVertex: AddVertexCallback\n) {\n const x = params.x,\n y = params.y,\n height = params.height,\n width = params.width;\n\n // Fill\n const fill_rgba = normalizeRGBA(params.fill);\n addVertex([x, y, z_index], fill_rgba);\n addVertex([x + width, y, z_index], fill_rgba);\n addVertex([x + width, y + height, z_index], fill_rgba);\n\n addVertex([x, y, z_index], fill_rgba);\n addVertex([x + width, y + height, z_index], fill_rgba);\n addVertex([x, y + height, z_index], fill_rgba);\n\n // Stroke\n const stroke_width = params['stroke-width'];\n if (stroke_width > 0) {\n // left side\n const stroke_rgba = normalizeRGBA(params.stroke);\n addVertex([x, y, z_index], stroke_rgba);\n addVertex([x + stroke_width, y, z_index], stroke_rgba);\n addVertex([x + stroke_width, y + height, z_index], stroke_rgba);\n\n addVertex([x, y, z_index], stroke_rgba);\n addVertex([x + stroke_width, y + height, z_index], stroke_rgba);\n addVertex([x, y + height, z_index], stroke_rgba);\n\n // right side\n addVertex([x + width, y, z_index], stroke_rgba);\n addVertex([x + width - stroke_width, y, z_index], stroke_rgba);\n addVertex([x + width - stroke_width, y + height, z_index], stroke_rgba);\n\n addVertex([x + width, y, z_index], stroke_rgba);\n addVertex([x + width - stroke_width, y + height, z_index], stroke_rgba);\n addVertex([x + width, y + height, z_index], stroke_rgba);\n\n // top side\n addVertex([x, y, z_index], stroke_rgba);\n addVertex([x + width, y, z_index], stroke_rgba);\n addVertex([x + width, y + stroke_width, z_index], stroke_rgba);\n\n addVertex([x, y, z_index], stroke_rgba);\n addVertex([x + width, y + stroke_width, z_index], stroke_rgba);\n addVertex([x, y + stroke_width, z_index], stroke_rgba);\n\n // bottom side\n addVertex([x, y + height, z_index], stroke_rgba);\n addVertex([x + width, y + height, z_index], stroke_rgba);\n addVertex([x + width, y + height - stroke_width, z_index], stroke_rgba);\n\n addVertex([x, y + height, z_index], stroke_rgba);\n addVertex([x + width, y + height - stroke_width, z_index], stroke_rgba);\n addVertex([x, y + height - stroke_width, z_index], stroke_rgba);\n }\n}\n\nfunction triangleToVertexes(\n params: ComputedShapeParams,\n z_index: number,\n addVertex: AddVertexCallback\n) {\n const fill_rgba = normalizeRGBA(params.fill);\n addVertex([params.x1, params.y1, z_index], fill_rgba);\n addVertex([params.x2, params.y2, z_index], fill_rgba);\n addVertex([params.x3, params.y3, z_index], fill_rgba);\n}\n\nfunction ellipseToVertexes(\n params: ComputedShapeParams,\n z_index: number,\n addVertex: AddVertexCallback\n) {\n const center = {\n x: params.x + params.width / 2,\n y: params.y + params.height / 2,\n };\n const horzrad = params.width / 2;\n const vertrad = params.height / 2;\n\n const fill_rgba = normalizeRGBA(params.fill);\n addVertex([center.x, center.y, z_index], fill_rgba);\n addVertex([center.x + horzrad, center.y, z_index], fill_rgba);\n addVertex(\n [\n center.x + halfsqrt2 * horzrad,\n center.y + halfsqrt2 * vertrad,\n z_index,\n ],\n fill_rgba\n );\n\n addVertex([center.x, center.y, z_index], fill_rgba);\n addVertex(\n [\n center.x + halfsqrt2 * horzrad,\n center.y + halfsqrt2 * vertrad,\n z_index,\n ],\n fill_rgba\n );\n addVertex([center.x, center.y + vertrad, z_index], fill_rgba);\n\n addVertex([center.x, center.y, z_index], fill_rgba);\n addVertex([center.x, center.y + vertrad, z_index], fill_rgba);\n addVertex(\n [\n center.x - halfsqrt2 * horzrad,\n center.y + halfsqrt2 * vertrad,\n z_index,\n ],\n fill_rgba\n );\n\n addVertex([center.x, center.y, z_index], fill_rgba);\n addVertex(\n [\n center.x - halfsqrt2 * horzrad,\n center.y + halfsqrt2 * vertrad,\n z_index,\n ],\n fill_rgba\n );\n addVertex([center.x - horzrad, center.y, z_index], fill_rgba);\n\n addVertex([center.x, center.y, z_index], fill_rgba);\n addVertex([center.x - horzrad, center.y, z_index], fill_rgba);\n addVertex(\n [\n center.x - halfsqrt2 * horzrad,\n center.y - halfsqrt2 * vertrad,\n z_index,\n ],\n fill_rgba\n );\n\n addVertex([center.x, center.y, z_index], fill_rgba);\n addVertex(\n [\n center.x - halfsqrt2 * horzrad,\n center.y - halfsqrt2 * vertrad,\n z_index,\n ],\n fill_rgba\n );\n addVertex([center.x, center.y - vertrad, z_index], fill_rgba);\n\n addVertex([center.x, center.y, z_index], fill_rgba);\n addVertex([center.x, center.y - vertrad, z_index], fill_rgba);\n addVertex(\n [\n center.x + halfsqrt2 * horzrad,\n center.y - halfsqrt2 * vertrad,\n z_index,\n ],\n fill_rgba\n );\n\n addVertex([center.x, center.y, z_index], fill_rgba);\n addVertex(\n [\n center.x + halfsqrt2 * horzrad,\n center.y - halfsqrt2 * vertrad,\n z_index,\n ],\n fill_rgba\n );\n addVertex([center.x + horzrad, center.y, z_index], fill_rgba);\n}\n\nfunction lineToVertexes(\n params: ComputedShapeParams,\n z_index: number,\n addVertex: AddVertexCallback\n) {\n // For simplicity of dealing with webGL we'll implement lines as thin triangle pairs\n let x1 = params.x1;\n let x2 = params.x2;\n let y1 = params.y1;\n let y2 = params.y2;\n\n if (x1 !== x2) {\n // WLOG make x1,y1 the one on the left\n if (Math.min(x1, x2) === x2) {\n const tmpx1 = x1;\n const tmpy1 = y1;\n x1 = x2;\n y1 = y2;\n x2 = tmpx1;\n y2 = tmpy1;\n }\n }\n\n const perpendicular_vector = [y2 - y1, x1 - x2];\n const perpendicular_vector_length = Math.sqrt(\n perpendicular_vector[0] * perpendicular_vector[0] +\n perpendicular_vector[1] * perpendicular_vector[1]\n );\n const unit_perp_vector = [\n perpendicular_vector[0] / perpendicular_vector_length,\n perpendicular_vector[1] / perpendicular_vector_length,\n ];\n\n const half_stroke_width = params['stroke-width'] / 2;\n const direction1 = [\n unit_perp_vector[0] * half_stroke_width,\n unit_perp_vector[1] * half_stroke_width,\n ];\n const direction2 = [direction1[0] * -1, direction1[1] * -1];\n const A = [x1 + direction1[0], y1 + direction1[1]];\n const B = [x1 + direction2[0], y1 + direction2[1]];\n const C = [x2 + direction1[0], y2 + direction1[1]];\n const D = [x2 + direction2[0], y2 + direction2[1]];\n\n const stroke_rgba = normalizeRGBA(params.stroke);\n addVertex([A[0], A[1], z_index], stroke_rgba);\n addVertex([B[0], B[1], z_index], stroke_rgba);\n addVertex([C[0], C[1], z_index], stroke_rgba);\n\n addVertex([C[0], C[1], z_index], stroke_rgba);\n addVertex([D[0], D[1], z_index], stroke_rgba);\n addVertex([B[0], B[1], z_index], stroke_rgba);\n}\n\nexport default function(\n oncoprint_shape_computed_params: ComputedShapeParams,\n z_index: number,\n addVertex: AddVertexCallback\n) {\n // target_position_array is an array with 3-d float vertexes\n // target_color_array is an array with rgba values in [0,1]\n // We pass them in to save on concatenation costs\n\n const type = oncoprint_shape_computed_params.type;\n if (type === 'rectangle') {\n return rectangleToVertexes(\n oncoprint_shape_computed_params,\n z_index,\n addVertex\n );\n } else if (type === 'triangle') {\n return triangleToVertexes(\n oncoprint_shape_computed_params,\n z_index,\n addVertex\n );\n } else if (type === 'ellipse') {\n return ellipseToVertexes(\n oncoprint_shape_computed_params,\n z_index,\n addVertex\n );\n } else if (type === 'line') {\n return lineToVertexes(\n oncoprint_shape_computed_params,\n z_index,\n addVertex\n );\n }\n}\n\nexport function getNumWebGLVertexes(shape: ComputedShapeParams) {\n let ret: number;\n switch (shape.type) {\n case 'rectangle':\n if (shape['stroke-width'] > 0) {\n ret = 30;\n } else {\n ret = 6;\n }\n break;\n case 'triangle':\n ret = 3;\n break;\n case 'ellipse':\n ret = 24;\n break;\n case 'line':\n ret = 6;\n break;\n }\n return ret;\n}\n","import { Datum } from './oncoprintmodel';\nimport { RGBAColor } from './oncoprintruleset';\n\ntype StringParameter = 'type';\ntype PercentNumberParameter =\n | 'width'\n | 'height'\n | 'x'\n | 'y'\n | 'x1'\n | 'x2'\n | 'x3'\n | 'y1'\n | 'y2'\n | 'y3';\ntype PlainNumberParameter = 'z' | 'stroke-width' | 'stroke-opacity';\ntype RGBAParameter = 'stroke' | 'fill';\ntype NumberParameter = PercentNumberParameter | PlainNumberParameter;\ntype Parameter = StringParameter | NumberParameter | RGBAParameter;\n\nconst default_parameter_values: { [x in StringParameter]?: string } &\n { [x in NumberParameter]?: number } &\n { [x in RGBAParameter]?: RGBAColor } = {\n width: 100,\n height: 100,\n x: 0,\n y: 0,\n z: 0,\n x1: 0,\n x2: 0,\n x3: 0,\n y1: 0,\n y2: 0,\n y3: 0,\n stroke: [0, 0, 0, 0],\n fill: [23, 23, 23, 1],\n 'stroke-width': 0,\n 'stroke-opacity': 0,\n};\n\nconst percent_parameter_name_to_dimension_index: {\n [x in PercentNumberParameter]: number;\n} = {\n width: 0,\n x: 0,\n x1: 0,\n x2: 0,\n x3: 0,\n height: 1,\n y: 1,\n y1: 1,\n y2: 1,\n y3: 1,\n};\n\nconst hash_parameter_order: Parameter[] = [\n 'width',\n 'height',\n 'x',\n 'y',\n 'z',\n 'x1',\n 'x2',\n 'x3',\n 'y1',\n 'y2',\n 'y3',\n 'stroke',\n 'fill',\n 'stroke-width',\n 'stroke-opacity',\n 'type',\n];\n\ntype StringParamFunction = (d: Datum) => string;\ntype NumberParamFunction = (d: Datum) => number;\ntype RGBAParamFunction = (d: Datum) => RGBAColor;\ntype ParamFunction =\n | StringParamFunction\n | NumberParamFunction\n | RGBAParamFunction;\n\nexport type ShapeParams = {\n [x in StringParameter]?: string | StringParamFunction;\n} &\n { [x in NumberParameter]?: number | NumberParamFunction } &\n { [x in RGBAParameter]?: RGBAColor | RGBAParamFunction };\n\ntype ShapeParamsWithType = {\n [x in StringParameter]?:\n | { type: 'function'; value: StringParamFunction }\n | { type: 'value'; value: string };\n} &\n {\n [x in NumberParameter]?:\n | { type: 'function'; value: NumberParamFunction }\n | { type: 'value'; value: number };\n } &\n {\n [x in RGBAParameter]?:\n | { type: 'function'; value: RGBAParamFunction }\n | { type: 'value'; value: RGBAColor };\n };\n\nexport type ComputedShapeParams = { [x in StringParameter]?: string } &\n { [x in NumberParameter]?: number } &\n { [x in RGBAParameter]?: RGBAColor };\n\nfunction isPercentParam(\n param_name: string\n): param_name is PercentNumberParameter {\n return param_name in percent_parameter_name_to_dimension_index;\n}\n\nexport class Shape {\n private static cache: { [hash: string]: ComputedShapeParams } = {}; // shape cache to reuse objects and thus save memory\n private params_with_type: ShapeParamsWithType = {};\n private onlyDependsOnWidthAndHeight: boolean;\n\n private instanceCache = {\n lastComputedParams: null as ComputedShapeParams | null,\n lastWidth: -1,\n lastHeight: -1,\n };\n\n constructor(private params: ShapeParams) {\n this.completeWithDefaults();\n this.markParameterTypes();\n }\n\n public static hashComputedShape(\n computed_params: ComputedShapeParams,\n z_index?: number | string\n ) {\n return (\n hash_parameter_order.reduce(function(\n hash: string,\n param_name: Parameter\n ) {\n return hash + ',' + computed_params[param_name];\n },\n '') +\n ',' +\n z_index\n );\n }\n\n private static getCachedShape(computed_params: ComputedShapeParams) {\n const hash = Shape.hashComputedShape(computed_params);\n Shape.cache[hash] = Shape.cache[hash] || Object.freeze(computed_params);\n return Shape.cache[hash];\n }\n\n public getRequiredParameters(): Parameter[] {\n throw 'Not defined for base class';\n }\n\n public completeWithDefaults() {\n const required_parameters = this.getRequiredParameters();\n for (let i = 0; i < required_parameters.length; i++) {\n const param = required_parameters[i];\n this.params[param] = (typeof this.params[param] === 'undefined'\n ? default_parameter_values[param]\n : this.params[param]) as any;\n }\n }\n public markParameterTypes() {\n const parameters = Object.keys(this.params) as Parameter[];\n let onlyDependsOnWidthAndHeight = true;\n for (let i = 0; i < parameters.length; i++) {\n const param_name = parameters[i];\n const param_val = this.params[param_name];\n if (typeof param_val === 'function') {\n this.params_with_type[param_name] = {\n type: 'function',\n value: param_val as any,\n };\n onlyDependsOnWidthAndHeight = false;\n } else {\n this.params_with_type[param_name] = {\n type: 'value',\n value: param_val,\n } as any;\n }\n }\n this.onlyDependsOnWidthAndHeight = onlyDependsOnWidthAndHeight;\n }\n public getComputedParams(\n d: Datum,\n base_width: number,\n base_height: number\n ) {\n if (\n this.onlyDependsOnWidthAndHeight &&\n this.instanceCache.lastWidth === base_width &&\n this.instanceCache.lastHeight === base_height\n ) {\n return this.instanceCache.lastComputedParams!;\n }\n\n const computed_params: Partial<ComputedShapeParams> = {};\n const param_names = Object.keys(this.params_with_type) as Parameter[];\n const dimensions: [number, number] = [base_width, base_height];\n for (let i = 0; i < param_names.length; i++) {\n const param_name = param_names[i];\n const param_val_map = this.params_with_type[param_name];\n let param_val = param_val_map.value;\n if (param_name !== 'type') {\n if (param_val_map.type === 'function') {\n param_val = (param_val as ParamFunction)(d);\n }\n // at this point, param_val is resolved to either a string or number\n\n if (isPercentParam(param_name)) {\n // if its a percentage param, compute value as percentage of width or height\n param_val =\n ((param_val as number) / 100) *\n dimensions[\n percent_parameter_name_to_dimension_index[\n param_name\n ]\n ];\n }\n }\n //@ts-ignore\n computed_params[param_name] = param_val;\n }\n\n if (this.onlyDependsOnWidthAndHeight) {\n // only cache if its cacheable, otherwise it would be a waste of memory to save\n this.instanceCache.lastHeight = base_height;\n this.instanceCache.lastWidth = base_width;\n this.instanceCache.lastComputedParams = Shape.getCachedShape(\n computed_params\n );\n }\n\n return Shape.getCachedShape(computed_params);\n }\n}\n\ntype SpecificComputedShapeParams<ShapeParamType> = {\n [x in ShapeParamType & StringParameter]: string;\n} &\n { [x in ShapeParamType & NumberParameter]: number } &\n { [x in ShapeParamType & RGBAParameter]: RGBAColor };\n\ntype RectangleParameter =\n | 'width'\n | 'height'\n | 'x'\n | 'y'\n | 'z'\n | 'stroke'\n | 'stroke-width'\n | 'fill';\nexport type ComputedRectangleParams = SpecificComputedShapeParams<\n RectangleParameter\n>;\nexport class Rectangle extends Shape {\n public getRequiredParameters(): RectangleParameter[] {\n return [\n 'width',\n 'height',\n 'x',\n 'y',\n 'z',\n 'stroke',\n 'fill',\n 'stroke-width',\n ];\n }\n}\n\ntype TriangleParameter =\n | 'x1'\n | 'x2'\n | 'x3'\n | 'y1'\n | 'y2'\n | 'y3'\n | 'z'\n | 'stroke'\n | 'stroke-width'\n | 'fill';\nexport type ComputedTriangleParams = SpecificComputedShapeParams<\n TriangleParameter\n>;\nexport class Triangle extends Shape {\n public getRequiredParameters(): TriangleParameter[] {\n return [\n 'x1',\n 'x2',\n 'x3',\n 'y1',\n 'y2',\n 'y3',\n 'z',\n 'stroke',\n 'fill',\n 'stroke-width',\n ];\n }\n}\n\nexport type EllipseParameter =\n | 'width'\n | 'height'\n | 'x'\n | 'y'\n | 'z'\n | 'stroke'\n | 'stroke-width'\n | 'fill';\nexport type ComputedEllipseParams = SpecificComputedShapeParams<\n EllipseParameter\n>;\nexport class Ellipse extends Shape {\n public getRequiredParameters(): EllipseParameter[] {\n return [\n 'width',\n 'height',\n 'x',\n 'y',\n 'z',\n 'stroke',\n 'fill',\n 'stroke-width',\n ];\n }\n}\n\nexport type LineParameter =\n | 'x1'\n | 'y1'\n | 'x2'\n | 'y2'\n | 'z'\n | 'stroke'\n | 'stroke-width';\nexport type ComputedLineParams = SpecificComputedShapeParams<LineParameter>;\nexport class Line extends Shape {\n public getRequiredParameters(): LineParameter[] {\n return ['x1', 'x2', 'y1', 'y2', 'z', 'stroke', 'stroke-width'];\n }\n}\n","export function getVertexShaderSource(columnsRightAfterGapsSize: number) {\n return `precision highp float;\n attribute float aPosVertex;\n attribute float aColVertex;\n attribute float aVertexOncoprintColumn;\n\n uniform float gapSize;\n\n uniform float columnsRightAfterGaps[${columnsRightAfterGapsSize}]; // sorted in ascending order\n\n uniform float columnWidth;\n uniform float scrollX;\n uniform float zoomX;\n uniform float scrollY;\n uniform float zoomY;\n uniform mat4 uMVMatrix;\n uniform mat4 uPMatrix;\n uniform float offsetY;\n uniform float supersamplingRatio;\n uniform float positionBitPackBase;\n uniform float texSize;\n varying float texCoord;\n \n \n\n vec3 getUnpackedPositionVec3() {\n \tfloat pos0 = floor(aPosVertex / (positionBitPackBase * positionBitPackBase));\n \tfloat pos0Contr = pos0 * positionBitPackBase * positionBitPackBase;\n \tfloat pos1 = floor((aPosVertex - pos0Contr)/positionBitPackBase);\n \tfloat pos1Contr = pos1 * positionBitPackBase;\n \tfloat pos2 = aPosVertex - pos0Contr - pos1Contr;\n \treturn vec3(pos0, pos1, pos2);\n }\n\n float getGapOffset() {\n // first do binary search to compute the number of gaps before this column, G(c)\n // G(c) = the index in columnsRightAfterGaps of the first entry thats greater than c\n \n int lower_incl = 0;\n int upper_excl = ${columnsRightAfterGapsSize};\n int numGaps = 0;\n \n for (int loopDummyVar = 0; loopDummyVar == 0; loopDummyVar += 0) {\n if (lower_incl >= upper_excl) {\n break;\n }\n \n int middle = (lower_incl + upper_excl)/2;\n if (columnsRightAfterGaps[middle] < aVertexOncoprintColumn) {\n // G(c) > middle\n lower_incl = middle + 1;\n } else if (columnsRightAfterGaps[middle] == aVertexOncoprintColumn) {\n // G(c) = middle + 1\n numGaps = middle + 1;\n break;\n } else {\n // columnsRightAfterGaps[middle] > column, so G(c) <= middle\n if (middle == 0) {\n // 0 <= G(c) <= 0 -> G(c) = 0\n numGaps = 0;\n break;\n } else if (columnsRightAfterGaps[middle-1] < aVertexOncoprintColumn) {\n // G(c) = middle\n numGaps = middle;\n break;\n } else {\n // columnsRightAfterGaps[middle-1] >= column, so G(c) <= middle-1\n upper_excl = middle;\n }\n }\n }\n \n // multiply it by the gap size to get the total offset\n return float(numGaps)*gapSize;\n }\n\n void main(void) {\n \tgl_Position = vec4(getUnpackedPositionVec3(), 1.0);\n \tgl_Position[0] += aVertexOncoprintColumn*columnWidth;\n \tgl_Position *= vec4(zoomX, zoomY, 1.0, 1.0);\n\n // gaps should not be affected by zoom:\n gl_Position[0] += getGapOffset();\n\n // offsetY is given zoomed:\n \tgl_Position[1] += offsetY;\n\n \tgl_Position -= vec4(scrollX, scrollY, 0.0, 0.0);\n \tgl_Position[0] *= supersamplingRatio;\n \tgl_Position[1] *= supersamplingRatio;\n \tgl_Position = uPMatrix * uMVMatrix * gl_Position;\n\n \ttexCoord = (aColVertex + 0.5) / texSize;\n }`;\n}\n\nexport function getFragmentShaderSource() {\n return `precision mediump float;\n varying float texCoord;\n uniform sampler2D uSampler;\n void main(void) {\n gl_FragColor = texture2D(uSampler, vec2(texCoord, 0.5));\n }`;\n}\n","import gl_matrix from 'gl-matrix';\nimport svgfactory from './svgfactory';\nimport makeSvgElement from './makesvgelement';\nimport shapeToVertexes, {\n getNumWebGLVertexes,\n} from './oncoprintshapetovertexes';\nimport CachedProperty from './CachedProperty';\nimport { ComputedShapeParams, Shape } from './oncoprintshape';\nimport $ from 'jquery';\nimport OncoprintModel, {\n ColumnId,\n ColumnLabel,\n ColumnProp,\n IdentifiedShapeList,\n TrackId,\n TrackOverlappingCells,\n TrackProp,\n} from './oncoprintmodel';\nimport OncoprintToolTip from './oncoprinttooltip';\nimport { arrayFindIndex, ifndef, sgndiff } from './utils';\nimport MouseUpEvent = JQuery.MouseUpEvent;\nimport MouseMoveEvent = JQuery.MouseMoveEvent;\nimport { CellClickCallback, CellMouseOverCallback } from './oncoprint';\nimport { getFragmentShaderSource, getVertexShaderSource } from './shaders';\nimport _ from 'lodash';\n\ntype ColorBankIndex = number; // index into vertex bank (e.g. 0, 4, 8, ...)\ntype ColorBank = number[]; // flat list of color: [c0,c0,c0,c0,v1,v1,v1,c1,c1,c1,c1,...]\ntype ColumnIdIndex = number;\ntype PositionVertex = [number, number, number];\ntype ColorVertex = [number, number, number, number];\n\nexport type OncoprintWebGLContext = WebGLRenderingContext & {\n viewportWidth: number;\n viewportHeight: number;\n}; // TODO: handle this differently, considered an anti-pattern https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html\n\nexport type OncoprintShaderProgram = WebGLProgram & {\n vertexPositionAttribute: any;\n vertexColorAttribute: any;\n vertexOncoprintColumnAttribute: any;\n\n gapSizeUniform: WebGLUniformLocation;\n columnsRightAfterGapsUniform: WebGLUniformLocation;\n\n samplerUniform: WebGLUniformLocation;\n pMatrixUniform: WebGLUniformLocation;\n mvMatrixUniform: WebGLUniformLocation;\n columnWidthUniform: WebGLUniformLocation;\n scrollXUniform: WebGLUniformLocation;\n scrollYUniform: WebGLUniformLocation;\n zoomXUniform: WebGLUniformLocation;\n zoomYUniform: WebGLUniformLocation;\n offsetYUniform: WebGLUniformLocation;\n supersamplingRatioUniform: WebGLUniformLocation;\n positionBitPackBaseUniform: WebGLUniformLocation;\n texSizeUniform: WebGLUniformLocation;\n}; // TODO: handle this differently, considered an anti-pattern https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html\n\nexport type OncoprintTrackBuffer = WebGLBuffer & {\n itemSize: number;\n numItems: number;\n}; // TODO: handle this differently, considered an anti-pattern https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html\n\nexport type OncoprintVertexTrackBuffer = OncoprintTrackBuffer & {\n // the universal shapes vertexes start at index itemSize*numItems, and go on for itemSize*universalShapesNumItems indexes\n specificShapesNumItems: number;\n universalShapesNumItems: number;\n};\n\nconst COLUMN_LABEL_ANGLE = 65;\nconst COLUMN_LABEL_MARGIN = 30;\n\nconst CELL_HIGHLIGHT_STROKE = 'rgba(0,0,0,0.5)';\n\nexport default class OncoprintWebGLCellView {\n public readonly position_bit_pack_base = 128;\n private readonly supersampling_ratio = 2;\n private readonly antialias_on_cell_width_thresh = 5;\n private antialias = true;\n\n private dummy_scroll_div_client_size: CachedProperty<{\n width: number;\n height: number;\n }>;\n public visible_area_width: number;\n private mouseMoveHandler: (evt: MouseMoveEvent) => void;\n\n private ctx: OncoprintWebGLContext | null;\n private ext: ANGLE_instanced_arrays | null;\n private overlay_ctx: CanvasRenderingContext2D | null;\n private column_label_ctx: CanvasRenderingContext2D | null;\n private mvMatrix: any;\n private pMatrix: any;\n private shader_program: OncoprintShaderProgram;\n\n private scroll_x: number = 0;\n private scroll_y: number = 0;\n private maximum_column_label_width = 0;\n private maximum_column_label_height = 0;\n private rendering_suppressed = false;\n\n private specific_shapes: TrackProp<IdentifiedShapeList[]> = {};\n private universal_shapes: TrackProp<ComputedShapeParams[]> = {};\n public vertex_data: TrackProp<{\n pos_array: Float32Array;\n col_array: Float32Array; //ColorBankIndex[],\n col_bank: ColorBank;\n universal_shapes_start_index: number;\n }> = {};\n public vertex_column_array: TrackProp<Float32Array> = {}; // ColumnIdIndex[]\n private vertex_position_buffer: TrackProp<OncoprintVertexTrackBuffer> = {};\n private vertex_color_buffer: TrackProp<OncoprintVertexTrackBuffer> = {};\n private vertex_column_buffer: TrackProp<OncoprintTrackBuffer> = {};\n private simple_count_buffer: OncoprintTrackBuffer | null = null;\n private is_buffer_empty: TrackProp<{\n position: boolean;\n color: boolean;\n column: boolean;\n color_texture: boolean;\n }> = {};\n private color_texture: TrackProp<{\n texture: WebGLTexture;\n size: number;\n }> = {};\n private id_to_first_vertex_index: TrackProp<ColumnProp<number>> = {}; // index of first vertex corresponding to given id for given track, e.g. 0, 3, 6, ...\n\n constructor(\n private $container: JQuery,\n private $canvas: JQuery<HTMLCanvasElement>,\n private $overlay_canvas: JQuery<HTMLCanvasElement>,\n private $column_label_canvas: JQuery<HTMLCanvasElement>,\n private $dummy_scroll_div_contents: JQuery,\n model: OncoprintModel,\n private tooltip: OncoprintToolTip,\n private highlight_area_callback:\n | undefined\n | ((left: number, right: number) => void),\n cell_over_callback: CellMouseOverCallback,\n cell_click_callback: CellClickCallback\n ) {\n this.getWebGLContextAndSetUpMatrices();\n this.setUpShaders(model);\n this.getOverlayContextAndClear();\n this.visible_area_width = $canvas[0].width;\n\n const self = this;\n\n this.tooltip.center = true;\n\n this.scroll_x = 0;\n this.scroll_y = 0;\n this.dummy_scroll_div_client_size = new CachedProperty(\n {\n width: $dummy_scroll_div_contents.parent()[0].clientWidth,\n height: $dummy_scroll_div_contents.parent()[0].clientHeight,\n },\n function() {\n return {\n width: $dummy_scroll_div_contents.parent()[0].clientWidth,\n height: $dummy_scroll_div_contents.parent()[0].clientHeight,\n };\n }\n );\n\n this.highlight_area_callback =\n typeof highlight_area_callback === 'undefined'\n ? function() {}\n : highlight_area_callback; // function(left, right) { ... }\n\n (function initializeOverlayEvents(self) {\n let dragging = false;\n let drag_diff_minimum = 10;\n let drag_start_x: number;\n let drag_end_x: number;\n let last_cell_over: TrackOverlappingCells | null = null;\n\n function dragIsValid(drag_start_x: number, drag_end_x: number) {\n return Math.abs(drag_start_x - drag_end_x) >= drag_diff_minimum;\n }\n\n function executeDragOrClick(mouse_up_evt?: MouseUpEvent) {\n if (!dragging) {\n return;\n }\n dragging = false;\n\n if (!dragIsValid(drag_start_x, drag_end_x)) {\n if (mouse_up_evt) {\n // its a click\n const offset = self.$overlay_canvas.offset();\n const mouseX = mouse_up_evt.pageX - offset.left;\n const mouseY = mouse_up_evt.pageY - offset.top;\n const overlapping_cells = model.getOverlappingCells(\n mouseX + self.scroll_x,\n mouseY + self.scroll_y\n );\n if (overlapping_cells === null) {\n cell_click_callback(null);\n } else {\n cell_click_callback(\n overlapping_cells.ids[0],\n overlapping_cells.track\n );\n }\n }\n return;\n }\n const left = Math.min(drag_start_x, drag_end_x);\n const right = Math.max(drag_start_x, drag_end_x);\n self.highlight_area_callback(\n left + self.scroll_x,\n right + self.scroll_x\n );\n }\n\n function mouseInOverlayCanvas(mouse_x: number, mouse_y: number) {\n const offset = self.$overlay_canvas.offset();\n const width = self.$overlay_canvas.width();\n const height = self.$overlay_canvas.height();\n return (\n mouse_x >= offset.left &&\n mouse_x < width + offset.left &&\n mouse_y >= offset.top &&\n mouse_y < height + offset.top\n );\n }\n\n self.mouseMoveHandler = function(evt) {\n if (!mouseInOverlayCanvas(evt.pageX, evt.pageY)) {\n self.clearOverlay();\n self.highlightHighlightedIds(model);\n self.highlightHighlightedTracks(model);\n tooltip.hide();\n if (last_cell_over !== null) {\n last_cell_over = null;\n cell_over_callback(null);\n }\n }\n };\n\n $(document).on('mousemove', self.mouseMoveHandler);\n self.$overlay_canvas.on('mousemove', function(evt) {\n if (self.rendering_suppressed) {\n return;\n }\n self.clearOverlay();\n\n const offset = self.$overlay_canvas.offset();\n const mouseX = evt.pageX - offset.left;\n const mouseY = evt.pageY - offset.top;\n let overlapping_cells = model.getOverlappingCells(\n mouseX + self.scroll_x,\n mouseY + self.scroll_y\n );\n if (!dragging) {\n const overlapping_data =\n overlapping_cells === null\n ? null\n : overlapping_cells.ids.map(function(id) {\n return model.getTrackDatum(\n overlapping_cells.track,\n id\n );\n });\n if (overlapping_data !== null) {\n last_cell_over = overlapping_cells;\n cell_over_callback(\n overlapping_cells.ids[0],\n overlapping_cells.track\n );\n\n self.highlightCell(\n model,\n overlapping_cells.track,\n overlapping_cells.ids[0]\n );\n self.highlightColumn(model, overlapping_cells.ids[0]);\n\n const clientRect = self.$overlay_canvas[0].getBoundingClientRect();\n tooltip.show(\n 250,\n model.getZoomedColumnLeft(\n overlapping_cells.ids[0]\n ) +\n model.getCellWidth() / 2 +\n clientRect.left -\n self.scroll_x,\n model.getCellTops(overlapping_cells.track) +\n clientRect.top -\n self.scroll_y,\n model.getTrackTooltipFn(overlapping_cells.track)(\n overlapping_data\n )\n );\n } else {\n tooltip.hideIfNotAlreadyGoingTo(150);\n overlapping_cells = null;\n }\n } else {\n overlapping_cells = null;\n drag_end_x = mouseX;\n const left = Math.min(mouseX, drag_start_x);\n const right = Math.max(mouseX, drag_start_x);\n const drag_rect_fill = dragIsValid(drag_start_x, drag_end_x)\n ? 'rgba(0,0,0,0.3)'\n : 'rgba(0,0,0,0.2)';\n self.overlayFillRect(\n left,\n 0,\n right - left,\n self.getVisibleAreaHeight(model),\n drag_rect_fill\n );\n }\n if (overlapping_cells === null) {\n last_cell_over = null;\n cell_over_callback(null);\n }\n\n self.highlightHighlightedIds(\n model,\n overlapping_cells ? overlapping_cells.ids : []\n );\n self.highlightHighlightedTracks(model);\n });\n\n self.$overlay_canvas.on('mousedown', function(evt) {\n if (!mouseInOverlayCanvas(evt.pageX, evt.pageY)) {\n return;\n }\n dragging = true;\n drag_start_x = evt.pageX - self.$overlay_canvas.offset().left;\n drag_end_x = drag_start_x;\n\n tooltip.hide();\n });\n self.$overlay_canvas.on('mouseup', function(evt) {\n if (!mouseInOverlayCanvas(evt.pageX, evt.pageY)) {\n return;\n }\n executeDragOrClick(evt);\n });\n self.$overlay_canvas.on('mouseleave', function(evt) {\n executeDragOrClick();\n });\n })(this);\n\n $dummy_scroll_div_contents.parent().scroll(function() {\n self.clearOverlay();\n self.highlightHighlightedIds(model);\n self.highlightHighlightedTracks(model);\n });\n }\n\n private getNewCanvas() {\n const old_canvas = this.$canvas[0];\n const new_canvas = old_canvas.cloneNode() as HTMLCanvasElement;\n const parent_node = old_canvas.parentNode;\n parent_node.removeChild(old_canvas);\n parent_node.insertBefore(new_canvas, parent_node.childNodes[0]); // keep on bottom since we need overlays to not be hidden\n this.$canvas = $(new_canvas);\n this.ctx = null;\n this.ext = null;\n }\n\n private getWebGLCanvasContext() {\n try {\n const canvas = this.$canvas[0];\n const ctx =\n this.ctx ||\n (canvas.getContext('experimental-webgl', {\n alpha: false,\n antialias: this.antialias,\n }) as OncoprintWebGLContext);\n ctx.clearColor(1.0, 1.0, 1.0, 1.0);\n ctx.clear(ctx.COLOR_BUFFER_BIT | ctx.DEPTH_BUFFER_BIT);\n ctx.viewportWidth = canvas.width;\n ctx.viewportHeight = canvas.height;\n ctx.viewport(0, 0, ctx.viewportWidth, ctx.viewportHeight);\n ctx.enable(ctx.DEPTH_TEST);\n ctx.enable(ctx.BLEND);\n ctx.blendEquation(ctx.FUNC_ADD);\n ctx.blendFunc(ctx.SRC_ALPHA, ctx.ONE_MINUS_SRC_ALPHA);\n ctx.depthMask(false);\n\n return ctx;\n } catch (e) {\n return null;\n }\n }\n\n private createShaderProgram(\n vertex_shader: WebGLShader,\n fragment_shader: WebGLShader\n ) {\n const program = this.ctx.createProgram();\n this.ctx.attachShader(program, vertex_shader);\n this.ctx.attachShader(program, fragment_shader);\n\n this.ctx.linkProgram(program);\n\n const success = this.ctx.getProgramParameter(\n program,\n this.ctx.LINK_STATUS\n );\n if (!success) {\n const msg = this.ctx.getProgramInfoLog(program);\n this.ctx.deleteProgram(program);\n throw 'Unable to link shader program: ' + msg;\n }\n\n return program;\n }\n\n private createShader(\n source: string,\n type: 'VERTEX_SHADER' | 'FRAGMENT_SHADER'\n ) {\n const shader = this.ctx.createShader(this.ctx[type]);\n this.ctx.shaderSource(shader, source);\n this.ctx.compileShader(shader);\n\n const success = this.ctx.getShaderParameter(\n shader,\n this.ctx.COMPILE_STATUS\n );\n if (!success) {\n const msg = this.ctx.getShaderInfoLog(shader);\n this.ctx.deleteShader(shader);\n throw 'Unable to compile shader: ' + msg;\n }\n\n return shader;\n }\n\n private overlayStrokeRect(\n x: number,\n y: number,\n width: number,\n height: number,\n color: string\n ) {\n const ctx = this.overlay_ctx;\n ctx.strokeStyle = color;\n (ctx as any).strokeWidth = 10;\n ctx.strokeRect(\n this.supersampling_ratio * x,\n this.supersampling_ratio * y,\n this.supersampling_ratio * width,\n this.supersampling_ratio * height\n );\n }\n\n private overlayFillRect(\n x: number,\n y: number,\n width: number,\n height: number,\n color: string\n ) {\n const ctx = this.overlay_ctx;\n ctx.fillStyle = color;\n ctx.fillRect(\n this.supersampling_ratio * x,\n this.supersampling_ratio * y,\n this.supersampling_ratio * width,\n this.supersampling_ratio * height\n );\n }\n\n public clearOverlay() {\n this.overlay_ctx.fillStyle = 'rgba(0,0,0,0)';\n this.overlay_ctx.clearRect(\n 0,\n 0,\n this.$overlay_canvas[0].width,\n this.$overlay_canvas[0].height\n );\n }\n\n private getOverlayContextAndClear() {\n this.overlay_ctx = this.$overlay_canvas[0].getContext('2d');\n this.clearOverlay();\n }\n\n private getColumnLabelsContext() {\n this.column_label_ctx = this.$column_label_canvas[0].getContext('2d');\n }\n\n private getColumnLabelY(model: OncoprintModel) {\n return (\n (model.getOncoprintHeight() + 10 - this.scroll_y) *\n this.supersampling_ratio\n );\n }\n\n private overlayColumnLabelHighlight(model: OncoprintModel, id: ColumnId) {\n const label = model.getColumnLabels()[id];\n if (label) {\n this.prepareContextForColumnLabelText(model, this.overlay_ctx);\n const cell_width = model.getCellWidth();\n const left_padding =\n ((label.left_padding_percent || 0) * cell_width) / 100;\n let highlightHeight = cell_width * this.supersampling_ratio;\n let highlightWidth =\n this.overlay_ctx.measureText(label.text).width +\n left_padding * this.supersampling_ratio +\n 20;\n let dx = left_padding * this.supersampling_ratio;\n if (label.circle_color) {\n const circleDiameter =\n 2 *\n this.getColumnLabelCircleSpec(model).radius *\n this.supersampling_ratio;\n highlightHeight = Math.max(highlightHeight, circleDiameter);\n highlightWidth = Math.max(highlightWidth, circleDiameter);\n dx = Math.min(dx, -circleDiameter / 2);\n }\n const origin_x =\n (model.getZoomedColumnLeft(id) +\n cell_width / 2 -\n this.scroll_x) *\n this.supersampling_ratio;\n const origin_y = this.getColumnLabelY(model);\n this.overlay_ctx.save();\n this.overlay_ctx.translate(origin_x, origin_y);\n const angle = this.getColumnLabelAngleRadians(label);\n this.overlay_ctx.rotate(angle);\n this.overlay_ctx.fillStyle = 'rgba(255,255,0,0.4)';\n this.overlay_ctx.fillRect(\n dx,\n -highlightHeight / 2,\n highlightWidth,\n highlightHeight\n );\n this.overlay_ctx.restore();\n }\n }\n\n private getWebGLContextAndSetUpMatrices() {\n this.ctx = this.getWebGLCanvasContext();\n if (this.ctx) {\n this.ext = this.ctx.getExtension('ANGLE_instanced_arrays');\n }\n (function initializeMatrices(self) {\n const mvMatrix = gl_matrix.mat4.create();\n gl_matrix.mat4.lookAt(mvMatrix, [0, 0, 1], [0, 0, 0], [0, 1, 0]);\n self.mvMatrix = mvMatrix;\n\n const pMatrix = gl_matrix.mat4.create();\n gl_matrix.mat4.ortho(\n pMatrix,\n 0,\n self.ctx.viewportWidth,\n self.ctx.viewportHeight,\n 0,\n -5,\n 1000\n ); // y axis inverted so that y increases down like SVG\n self.pMatrix = pMatrix;\n })(this);\n }\n\n private getColumnIndexesAfterAGap(model: OncoprintModel) {\n // uniform length is minimum 1\n return model\n .getColumnIndexesAfterAGap()\n .concat([Number.POSITIVE_INFINITY]);\n }\n\n private setUpShaders(model: OncoprintModel) {\n const columnsRightAfterGapsSize = this.getColumnIndexesAfterAGap(model)\n .length;\n const vertex_shader = this.createShader(\n getVertexShaderSource(columnsRightAfterGapsSize),\n 'VERTEX_SHADER'\n );\n const fragment_shader = this.createShader(\n getFragmentShaderSource(),\n 'FRAGMENT_SHADER'\n );\n\n const shader_program = this.createShaderProgram(\n vertex_shader,\n fragment_shader\n ) as OncoprintShaderProgram;\n shader_program.vertexPositionAttribute = this.ctx.getAttribLocation(\n shader_program,\n 'aPosVertex'\n );\n this.ctx.enableVertexAttribArray(\n shader_program.vertexPositionAttribute\n );\n shader_program.vertexColorAttribute = this.ctx.getAttribLocation(\n shader_program,\n 'aColVertex'\n );\n this.ctx.enableVertexAttribArray(shader_program.vertexColorAttribute);\n shader_program.vertexOncoprintColumnAttribute = this.ctx.getAttribLocation(\n shader_program,\n 'aVertexOncoprintColumn'\n );\n this.ctx.enableVertexAttribArray(\n shader_program.vertexOncoprintColumnAttribute\n );\n\n shader_program.gapSizeUniform = this.ctx.getUniformLocation(\n shader_program,\n 'gapSize'\n );\n shader_program.columnsRightAfterGapsUniform = this.ctx.getUniformLocation(\n shader_program,\n 'columnsRightAfterGaps'\n );\n shader_program.samplerUniform = this.ctx.getUniformLocation(\n shader_program,\n 'uSampler'\n );\n shader_program.pMatrixUniform = this.ctx.getUniformLocation(\n shader_program,\n 'uPMatrix'\n );\n shader_program.mvMatrixUniform = this.ctx.getUniformLocation(\n shader_program,\n 'uMVMatrix'\n );\n shader_program.columnWidthUniform = this.ctx.getUniformLocation(\n shader_program,\n 'columnWidth'\n );\n shader_program.scrollXUniform = this.ctx.getUniformLocation(\n shader_program,\n 'scrollX'\n );\n shader_program.scrollYUniform = this.ctx.getUniformLocation(\n shader_program,\n 'scrollY'\n );\n shader_program.zoomXUniform = this.ctx.getUniformLocation(\n shader_program,\n 'zoomX'\n );\n shader_program.zoomYUniform = this.ctx.getUniformLocation(\n shader_program,\n 'zoomY'\n );\n shader_program.offsetYUniform = this.ctx.getUniformLocation(\n shader_program,\n 'offsetY'\n );\n shader_program.supersamplingRatioUniform = this.ctx.getUniformLocation(\n shader_program,\n 'supersamplingRatio'\n );\n shader_program.positionBitPackBaseUniform = this.ctx.getUniformLocation(\n shader_program,\n 'positionBitPackBase'\n );\n shader_program.texSizeUniform = this.ctx.getUniformLocation(\n shader_program,\n 'texSize'\n );\n\n this.shader_program = shader_program;\n }\n\n private resizeAndClear(model: OncoprintModel) {\n const height = this.getVisibleAreaHeight(model);\n const total_width = this.getTotalWidth(model);\n const visible_area_width = this.visible_area_width;\n const scrollbar_slack = 20;\n this.$dummy_scroll_div_contents.css({\n 'min-width': total_width,\n 'min-height': model.getOncoprintHeight(),\n });\n this.$dummy_scroll_div_contents.parent().css({\n height: height + scrollbar_slack,\n width: visible_area_width + scrollbar_slack,\n }); // add space for scrollbars\n this.dummy_scroll_div_client_size.update();\n this.$canvas[0].height = this.supersampling_ratio * height;\n this.$canvas[0].style.height = height + 'px';\n this.$overlay_canvas[0].height = this.supersampling_ratio * height;\n this.$overlay_canvas[0].style.height = height + 'px';\n this.$column_label_canvas[0].height = this.supersampling_ratio * height;\n this.$column_label_canvas[0].style.height = height + 'px';\n this.$canvas[0].width = this.supersampling_ratio * visible_area_width;\n this.$canvas[0].style.width = visible_area_width + 'px';\n this.$overlay_canvas[0].width =\n this.supersampling_ratio * visible_area_width;\n this.$overlay_canvas[0].style.width = visible_area_width + 'px';\n this.$column_label_canvas[0].width =\n this.supersampling_ratio * visible_area_width;\n this.$column_label_canvas[0].style.width = visible_area_width + 'px';\n this.$container.css('height', height);\n this.$container.css('width', visible_area_width);\n this.getWebGLContextAndSetUpMatrices();\n this.setUpShaders(model);\n this.getOverlayContextAndClear();\n this.getColumnLabelsContext();\n }\n\n private renderAllTracks(model: OncoprintModel, dont_resize?: boolean) {\n if (this.rendering_suppressed) {\n return;\n }\n\n const scroll_x = this.scroll_x;\n const scroll_y = this.scroll_y;\n const zoom_x = model.getHorzZoom();\n const zoom_y = model.getVertZoom();\n\n const viewport = this.getViewportOncoprintSpace(model);\n const window_left = viewport.left;\n const window_right = viewport.right;\n const window_top = viewport.top;\n const window_bottom = viewport.bottom;\n const id_order = model.getIdOrder();\n let horz_first_id_in_window_index = model.getClosestColumnIndexToLeft(\n window_left\n );\n const horz_first_id_after_window_index = model.getClosestColumnIndexToLeft(\n window_right,\n false,\n true\n );\n horz_first_id_in_window_index =\n horz_first_id_in_window_index < 1\n ? 0\n : horz_first_id_in_window_index - 1;\n\n const horz_first_id_in_window = id_order[horz_first_id_in_window_index];\n const horz_first_id_after_window =\n horz_first_id_after_window_index === -1 ||\n horz_first_id_after_window_index === id_order.length\n ? null\n : id_order[horz_first_id_after_window_index];\n\n if (!dont_resize) {\n this.resizeAndClear(model);\n }\n this.ctx.clearColor(1.0, 1.0, 1.0, 1.0);\n this.ctx.clear(this.ctx.COLOR_BUFFER_BIT | this.ctx.DEPTH_BUFFER_BIT);\n\n const tracks = model.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track_id = tracks[i];\n const cell_top = model.getCellTops(track_id);\n const cell_height = model.getCellHeight(track_id);\n if (\n cell_top / zoom_y >= window_bottom ||\n (cell_top + cell_height) / zoom_y < window_top\n ) {\n // vertical clipping\n continue;\n }\n const buffers = this.getTrackBuffers(track_id);\n if (buffers.position.numItems === 0) {\n continue;\n }\n\n for (const forSpecificShapes of [false, true]) {\n const shader_program = this.shader_program;\n this.ctx.useProgram(shader_program);\n\n if (forSpecificShapes) {\n this.ctx.bindBuffer(\n this.ctx.ARRAY_BUFFER,\n buffers.position\n );\n this.ctx.vertexAttribPointer(\n shader_program.vertexPositionAttribute,\n buffers.position.itemSize,\n this.ctx.FLOAT,\n false,\n 0,\n 0\n );\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, buffers.color);\n this.ctx.vertexAttribPointer(\n shader_program.vertexColorAttribute,\n buffers.color.itemSize,\n this.ctx.FLOAT,\n false,\n 0,\n 0\n );\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, buffers.column);\n this.ctx.vertexAttribPointer(\n shader_program.vertexOncoprintColumnAttribute,\n buffers.column.itemSize,\n this.ctx.FLOAT,\n false,\n 0,\n 0\n );\n // make sure to set divisor 0, otherwise the track will only use the first item in the column buffer\n this.ext.vertexAttribDivisorANGLE(\n shader_program.vertexOncoprintColumnAttribute,\n 0\n );\n } else {\n // set up for drawArraysInstanced\n const universalShapesStart =\n buffers.position.specificShapesNumItems *\n buffers.position.itemSize;\n this.ctx.bindBuffer(\n this.ctx.ARRAY_BUFFER,\n buffers.position\n );\n this.ctx.vertexAttribPointer(\n shader_program.vertexPositionAttribute,\n buffers.position.itemSize,\n this.ctx.FLOAT,\n false,\n 0,\n 4 * universalShapesStart\n );\n\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, buffers.color);\n this.ctx.vertexAttribPointer(\n shader_program.vertexColorAttribute,\n buffers.color.itemSize,\n this.ctx.FLOAT,\n false,\n 0,\n 4 * universalShapesStart\n );\n\n this.ctx.bindBuffer(\n this.ctx.ARRAY_BUFFER,\n this.simple_count_buffer\n );\n this.ctx.vertexAttribPointer(\n shader_program.vertexOncoprintColumnAttribute,\n 1,\n this.ctx.FLOAT,\n false,\n 0,\n 4 * horz_first_id_in_window_index\n );\n this.ext.vertexAttribDivisorANGLE(\n shader_program.vertexOncoprintColumnAttribute,\n 1\n );\n }\n\n this.ctx.activeTexture(this.ctx.TEXTURE0);\n this.ctx.bindTexture(\n this.ctx.TEXTURE_2D,\n buffers.color_tex.texture\n );\n this.ctx.uniform1i(shader_program.samplerUniform, 0);\n this.ctx.uniform1f(\n shader_program.texSizeUniform,\n buffers.color_tex.size\n );\n\n this.ctx.uniform1fv(\n shader_program.columnsRightAfterGapsUniform,\n this.getColumnIndexesAfterAGap(model)\n ); // need min size of 1\n this.ctx.uniform1f(\n shader_program.gapSizeUniform,\n model.getGapSize()\n );\n\n this.ctx.uniformMatrix4fv(\n shader_program.pMatrixUniform,\n false,\n this.pMatrix\n );\n this.ctx.uniformMatrix4fv(\n shader_program.mvMatrixUniform,\n false,\n this.mvMatrix\n );\n this.ctx.uniform1f(\n shader_program.columnWidthUniform,\n model.getCellWidth(true) + model.getCellPadding(true)\n );\n this.ctx.uniform1f(shader_program.scrollXUniform, scroll_x);\n this.ctx.uniform1f(shader_program.scrollYUniform, scroll_y);\n this.ctx.uniform1f(shader_program.zoomXUniform, zoom_x);\n this.ctx.uniform1f(shader_program.zoomYUniform, zoom_y);\n this.ctx.uniform1f(shader_program.offsetYUniform, cell_top);\n this.ctx.uniform1f(\n shader_program.supersamplingRatioUniform,\n this.supersampling_ratio\n );\n this.ctx.uniform1f(\n shader_program.positionBitPackBaseUniform,\n this.position_bit_pack_base\n );\n if (forSpecificShapes) {\n const first_index = this.id_to_first_vertex_index[track_id][\n horz_first_id_in_window\n ];\n const first_index_out =\n horz_first_id_after_window === null\n ? buffers.position.specificShapesNumItems\n : this.id_to_first_vertex_index[track_id][\n horz_first_id_after_window\n ];\n this.ctx.drawArrays(\n this.ctx.TRIANGLES,\n first_index,\n first_index_out - first_index\n );\n } else {\n this.ext.drawArraysInstancedANGLE(\n this.ctx.TRIANGLES,\n 0,\n buffers.position.itemSize *\n buffers.position.universalShapesNumItems,\n horz_first_id_after_window_index -\n horz_first_id_in_window_index\n );\n }\n }\n }\n this.ctx.flush();\n this.renderColumnLabels(\n model,\n id_order.slice(\n horz_first_id_in_window_index,\n horz_first_id_after_window_index === -1\n ? undefined\n : horz_first_id_after_window_index\n )\n );\n\n // finally, refresh overlay (highlights)\n this.clearOverlay();\n this.highlightHighlightedIds(model);\n this.highlightHighlightedTracks(model);\n }\n\n private static getColumnLabelsFontSize(model: OncoprintModel) {\n return model.getCellWidth() / 2 + 2;\n }\n\n private prepareContextForColumnLabelText(\n model: OncoprintModel,\n ctx: CanvasRenderingContext2D\n ) {\n const font_size = OncoprintWebGLCellView.getColumnLabelsFontSize(model);\n const font_family = 'Arial';\n ctx.font = this.supersampling_ratio * font_size + 'px ' + font_family;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n }\n\n private renderColumnLabels(model: OncoprintModel, ids: ColumnId[]) {\n // first clear\n this.column_label_ctx.fillStyle = 'rgba(0,0,0,0)';\n this.column_label_ctx.clearRect(\n 0,\n 0,\n this.$column_label_canvas[0].width,\n this.$column_label_canvas[0].height\n );\n this.maximum_column_label_width = 0;\n this.maximum_column_label_height = 0;\n\n // continue to rendering\n const labels = model.getColumnLabels();\n\n // dont do anything if theres no labels\n if (Object.keys(labels).length === 0) {\n return;\n }\n\n const origin_y = this.getColumnLabelY(model);\n const x_map = model.getZoomedColumnLeft();\n const scroll_x = this.scroll_x;\n const cell_width = model.getCellWidth();\n\n this.prepareContextForColumnLabelText(model, this.column_label_ctx);\n for (let i = 0; i < ids.length; i++) {\n const label = labels[ids[i]];\n let label_height =\n this.column_label_ctx.measureText('m').width /\n this.supersampling_ratio;\n if (label) {\n const origin_x =\n (x_map[ids[i]] + cell_width / 2 - scroll_x) *\n this.supersampling_ratio;\n if (label.circle_color) {\n // draw circle if specified\n this.column_label_ctx.save();\n const circleSpec = this.getColumnLabelCircleSpec(model);\n label_height = Math.max(\n 2 * circleSpec.radius,\n label_height\n );\n this.column_label_ctx.translate(origin_x, origin_y);\n this.column_label_ctx.fillStyle = label.circle_color;\n this.column_label_ctx.beginPath();\n this.column_label_ctx.arc(\n 0,\n 0,\n this.supersampling_ratio * circleSpec.radius,\n 0,\n 2 * Math.PI\n );\n this.column_label_ctx.fill();\n this.column_label_ctx.restore();\n }\n this.column_label_ctx.save();\n const text_angle = this.getColumnLabelAngleRadians(label);\n const left_padding =\n ((label.left_padding_percent || 0) * cell_width) / 100;\n this.column_label_ctx.translate(origin_x, origin_y);\n this.column_label_ctx.rotate(text_angle);\n this.column_label_ctx.fillStyle =\n label.text_color || 'rgba(0,0,0,1)';\n this.column_label_ctx.fillText(\n label.text,\n left_padding * this.supersampling_ratio,\n 0\n );\n const text_width =\n this.column_label_ctx.measureText(label.text).width /\n this.supersampling_ratio;\n\n this.maximum_column_label_width = Math.max(\n this.maximum_column_label_width,\n Math.cos(text_angle) * text_width\n );\n\n this.maximum_column_label_height = Math.max(\n this.maximum_column_label_height,\n Math.sin(text_angle) * text_width,\n label_height\n );\n\n this.column_label_ctx.restore();\n }\n }\n }\n\n private getColumnLabelAngleRadians(label: ColumnLabel) {\n return (\n (ifndef(label.angle_in_degrees, COLUMN_LABEL_ANGLE) * Math.PI) / 180\n );\n }\n\n private getColumnLabelCircleSpec(model: OncoprintModel) {\n const radius = 0.9 * (model.getCellWidth() / 2);\n return { radius };\n }\n\n private ensureSimpleCountBuffer(model: OncoprintModel) {\n const numColumns = model.getIdOrder().length;\n if (\n !this.simple_count_buffer ||\n this.simple_count_buffer.numItems !== numColumns\n ) {\n const buffer = this.ctx.createBuffer() as OncoprintTrackBuffer;\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, buffer);\n this.ctx.bufferData(\n this.ctx.ARRAY_BUFFER,\n new Float32Array(_.range(0, numColumns)),\n this.ctx.STATIC_DRAW\n );\n buffer.itemSize = 1;\n buffer.numItems = numColumns;\n this.simple_count_buffer = buffer;\n }\n }\n\n private clearTrackPositionAndColorBuffers(\n model: OncoprintModel,\n track_id?: TrackId\n ) {\n let tracks_to_clear;\n if (typeof track_id === 'undefined') {\n tracks_to_clear = model.getTracks();\n } else {\n tracks_to_clear = [track_id];\n }\n for (let i = 0; i < tracks_to_clear.length; i++) {\n if (this.is_buffer_empty[tracks_to_clear[i]]) {\n this.is_buffer_empty[tracks_to_clear[i]].position = true;\n this.is_buffer_empty[tracks_to_clear[i]].color = true;\n this.is_buffer_empty[tracks_to_clear[i]].color_texture = true;\n }\n }\n }\n\n private clearTrackColumnBuffers(model: OncoprintModel, track_id?: TrackId) {\n let tracks_to_clear;\n if (typeof track_id === 'undefined') {\n tracks_to_clear = model.getTracks();\n } else {\n tracks_to_clear = [track_id];\n }\n for (let i = 0; i < tracks_to_clear.length; i++) {\n if (this.is_buffer_empty[tracks_to_clear[i]]) {\n this.is_buffer_empty[tracks_to_clear[i]].column = true;\n }\n }\n }\n\n private deleteBuffers(model: OncoprintModel, track_id?: TrackId) {\n let tracks_to_clear;\n if (typeof track_id === 'undefined') {\n tracks_to_clear = model.getTracks();\n } else {\n tracks_to_clear = [track_id];\n }\n for (let i = 0; i < tracks_to_clear.length; i++) {\n const track_id = tracks_to_clear[i];\n if (this.vertex_position_buffer[track_id]) {\n this.ctx.deleteBuffer(this.vertex_position_buffer[track_id]);\n delete this.vertex_position_buffer[track_id];\n }\n if (this.vertex_color_buffer[track_id]) {\n this.ctx.deleteBuffer(this.vertex_color_buffer[track_id]);\n delete this.vertex_color_buffer[track_id];\n }\n if (this.vertex_column_buffer[track_id]) {\n this.ctx.deleteBuffer(this.vertex_column_buffer[track_id]);\n delete this.vertex_column_buffer[track_id];\n }\n if (this.color_texture[track_id]) {\n this.ctx.deleteTexture(this.color_texture[track_id].texture);\n delete this.color_texture[track_id];\n }\n this.is_buffer_empty[track_id] = {\n position: true,\n color: true,\n color_texture: true,\n column: true,\n };\n }\n }\n\n private deleteSimpleCountBuffer(model: OncoprintModel) {\n if (this.simple_count_buffer) {\n this.ctx.deleteBuffer(this.simple_count_buffer);\n this.simple_count_buffer = null;\n }\n }\n\n private getTrackBuffers(track_id: TrackId) {\n this.is_buffer_empty[track_id] = this.is_buffer_empty[track_id] || {\n position: true,\n color: true,\n color_texture: true,\n column: true,\n };\n\n if (this.is_buffer_empty[track_id].position) {\n const pos_buffer =\n this.vertex_position_buffer[track_id] ||\n (this.ctx.createBuffer() as OncoprintVertexTrackBuffer);\n const pos_array = this.vertex_data[track_id].pos_array;\n const universal_shapes_start_index = this.vertex_data[track_id]\n .universal_shapes_start_index;\n\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, pos_buffer);\n this.ctx.bufferData(\n this.ctx.ARRAY_BUFFER,\n pos_array,\n this.ctx.STATIC_DRAW\n );\n pos_buffer.itemSize = 1;\n pos_buffer.specificShapesNumItems =\n universal_shapes_start_index / pos_buffer.itemSize;\n pos_buffer.universalShapesNumItems =\n (pos_array.length - universal_shapes_start_index) /\n pos_buffer.itemSize;\n\n this.vertex_position_buffer[track_id] = pos_buffer;\n }\n\n if (this.is_buffer_empty[track_id].color) {\n const col_buffer =\n this.vertex_color_buffer[track_id] ||\n (this.ctx.createBuffer() as OncoprintVertexTrackBuffer);\n const col_array = this.vertex_data[track_id].col_array;\n const universal_shapes_start_index = this.vertex_data[track_id]\n .universal_shapes_start_index;\n\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, col_buffer);\n this.ctx.bufferData(\n this.ctx.ARRAY_BUFFER,\n col_array,\n this.ctx.STATIC_DRAW\n );\n col_buffer.itemSize = 1;\n col_buffer.specificShapesNumItems =\n universal_shapes_start_index / col_buffer.itemSize;\n col_buffer.universalShapesNumItems =\n (col_array.length - universal_shapes_start_index) /\n col_buffer.itemSize;\n\n this.vertex_color_buffer[track_id] = col_buffer;\n }\n\n if (this.is_buffer_empty[track_id].color_texture) {\n const tex = this.color_texture[track_id]\n ? this.color_texture[track_id].texture\n : this.ctx.createTexture();\n this.ctx.bindTexture(this.ctx.TEXTURE_2D, tex);\n\n const color_bank = this.vertex_data[track_id].col_bank;\n const width = Math.pow(\n 2,\n Math.ceil((Math as any).log2(color_bank.length / 4))\n );\n while (color_bank.length < 4 * width) {\n color_bank.push(0);\n }\n const height = 1;\n this.ctx.texImage2D(\n this.ctx.TEXTURE_2D,\n 0,\n this.ctx.RGBA,\n width,\n height,\n 0,\n this.ctx.RGBA,\n this.ctx.UNSIGNED_BYTE,\n new Uint8Array(color_bank)\n );\n this.ctx.texParameteri(\n this.ctx.TEXTURE_2D,\n this.ctx.TEXTURE_MIN_FILTER,\n this.ctx.NEAREST\n );\n this.ctx.texParameteri(\n this.ctx.TEXTURE_2D,\n this.ctx.TEXTURE_MAG_FILTER,\n this.ctx.NEAREST\n );\n this.color_texture[track_id] = { texture: tex, size: width };\n }\n\n if (this.is_buffer_empty[track_id].column) {\n const vertex_column_buffer =\n this.vertex_column_buffer[track_id] ||\n (this.ctx.createBuffer() as OncoprintTrackBuffer);\n const vertex_column_array = this.vertex_column_array[track_id];\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, vertex_column_buffer);\n this.ctx.bufferData(\n this.ctx.ARRAY_BUFFER,\n vertex_column_array,\n this.ctx.STATIC_DRAW\n );\n vertex_column_buffer.itemSize = 1;\n vertex_column_buffer.numItems =\n vertex_column_array.length / vertex_column_buffer.itemSize;\n\n this.vertex_column_buffer[track_id] = vertex_column_buffer;\n }\n this.is_buffer_empty[track_id] = {\n position: false,\n color: false,\n column: false,\n color_texture: false,\n };\n\n return {\n position: this.vertex_position_buffer[track_id],\n color: this.vertex_color_buffer[track_id],\n color_tex: this.color_texture[track_id],\n column: this.vertex_column_buffer[track_id],\n };\n }\n\n private computeVertexColumns(model: OncoprintModel, track_id: TrackId) {\n if (this.rendering_suppressed) {\n return;\n }\n const num_items = this.vertex_data[track_id].pos_array.length;\n const id_to_first_vertex_index = this.id_to_first_vertex_index[\n track_id\n ];\n const id_to_index = model.getVisibleIdToIndexMap();\n const id_and_first_vertex: [ColumnId, number][] = Object.keys(\n id_to_first_vertex_index\n )\n .map(function(id) {\n return [id, id_to_first_vertex_index[id]] as [ColumnId, number];\n })\n .sort(function(a, b) {\n return sgndiff(a[1], b[1]);\n });\n const vertex_column_array = new Float32Array(num_items);\n let vertex_index = 0;\n for (let i = 0; i < id_and_first_vertex.length; i++) {\n const num_to_add =\n (i === id_and_first_vertex.length - 1\n ? num_items\n : id_and_first_vertex[i + 1][1]) -\n id_and_first_vertex[i][1];\n const column = id_to_index[id_and_first_vertex[i][0]];\n for (let j = 0; j < num_to_add; j++) {\n vertex_column_array[vertex_index] = column;\n vertex_index += 1;\n }\n }\n this.vertex_column_array[track_id] = vertex_column_array;\n this.clearTrackColumnBuffers(model, track_id);\n }\n\n private computeVertexPositionsAndVertexColors(\n model: OncoprintModel,\n track_id: TrackId\n ) {\n if (this.rendering_suppressed) {\n return;\n }\n\n // check simple count buffer whenever we recompute vertexes\n this.ensureSimpleCountBuffer(model);\n\n const universal_shapes = this.universal_shapes[track_id];\n const id_to_index = model.getIdToIndexMap();\n const specific_shapes = _.sortBy(\n this.specific_shapes[track_id],\n o => id_to_index[o.id]\n );\n // Compute vertex array\n const num_vertexes =\n _.sumBy(specific_shapes, (shapeList: IdentifiedShapeList) => {\n return _.sumBy(shapeList.shape_list, getNumWebGLVertexes);\n }) +\n (universal_shapes\n ? _.sumBy(universal_shapes, getNumWebGLVertexes)\n : 0);\n const vertex_pos_array = new Float32Array(num_vertexes);\n const vertex_col_array = new Float32Array(num_vertexes);\n\n // original values dont mean anything but its faster to create an object with all the keys\n // already in it than to slowly grow it\n const id_to_first_vertex_index: {\n [columnId: string]: number;\n } = _.clone(id_to_index);\n\n const color_vertexes: ColorVertex[] = [];\n const color_bank_index: { [colorHash: string]: ColorBankIndex } = {};\n\n const position_bit_pack_base = this.position_bit_pack_base;\n function packPos(posVertex: number[]) {\n // values must be in [0,255] (integer)\n return (\n position_bit_pack_base * position_bit_pack_base * posVertex[0] +\n position_bit_pack_base * posVertex[1] +\n posVertex[2]\n );\n }\n\n const vertexifiedShapes: {\n [shapeHash: string]: { position: number[]; color: number[] };\n } = {};\n let vertex_array_index = 0;\n\n function addShapeVertexes(_shape: ComputedShapeParams, zindex: number) {\n const hash = Shape.hashComputedShape(_shape, zindex);\n if (!(hash in vertexifiedShapes)) {\n vertexifiedShapes[hash] = { position: [], color: [] };\n const position = vertexifiedShapes[hash].position;\n const color = vertexifiedShapes[hash].color;\n shapeToVertexes(_shape, zindex, function(\n pos: PositionVertex,\n col: ColorVertex\n ) {\n pos = pos.map(Math.round) as PositionVertex;\n\n position.push(packPos(pos));\n\n const col_hash = `${col[0]},${col[1]},${col[2]},${col[3]}`;\n let col_index = color_bank_index[col_hash];\n if (typeof col_index === 'undefined') {\n col_index = color_vertexes.length;\n color_vertexes.push(col);\n color_bank_index[col_hash] = col_index;\n }\n color.push(col_index);\n });\n }\n const positionVertexes = vertexifiedShapes[hash].position;\n const colorVertexes = vertexifiedShapes[hash].color;\n for (let i = 0; i < positionVertexes.length; i++) {\n vertex_pos_array[vertex_array_index] = positionVertexes[i];\n vertex_col_array[vertex_array_index] = colorVertexes[i];\n vertex_array_index += 1;\n }\n }\n\n for (let i = 0; i < specific_shapes.length; i++) {\n const shape_list = specific_shapes[i].shape_list;\n const id = specific_shapes[i].id;\n\n id_to_first_vertex_index[id] = vertex_array_index;\n\n for (let j = 0; j < shape_list.length; j++) {\n const shape = shape_list[j];\n addShapeVertexes(shape, j);\n }\n }\n\n // record start index of universal shapes\n const universal_shapes_start_index = vertex_array_index;\n if (universal_shapes) {\n for (let j = 0; j < universal_shapes.length; j++) {\n const shape = universal_shapes[j];\n addShapeVertexes(shape, j);\n }\n }\n\n const color_bank: ColorBank = color_vertexes.reduce(function(\n arr,\n next\n ) {\n return arr.concat(next);\n },\n []);\n // minimum color bank to avoid webGL texture errors\n if (color_bank.length === 0) {\n color_bank.push(0, 0, 0, 0);\n }\n this.vertex_data[track_id] = {\n pos_array: vertex_pos_array,\n col_array: vertex_col_array,\n col_bank: color_bank,\n universal_shapes_start_index,\n };\n this.id_to_first_vertex_index[track_id] = id_to_first_vertex_index;\n\n this.clearTrackPositionAndColorBuffers(model, track_id);\n }\n\n private getShapes(model: OncoprintModel, track_id: TrackId) {\n if (this.rendering_suppressed) {\n return;\n }\n this.specific_shapes[track_id] = model.getSpecificShapesForData(\n track_id,\n true\n );\n this.universal_shapes[track_id] = model.getTrackUniversalShapes(\n track_id,\n true\n );\n }\n\n private refreshCanvas(model: OncoprintModel) {\n // whenever you get a new context, you have to get new buffers\n this.deleteBuffers(model);\n this.deleteSimpleCountBuffer(model);\n this.getNewCanvas();\n this.getWebGLContextAndSetUpMatrices();\n this.setUpShaders(model);\n this.ensureSimpleCountBuffer(model);\n }\n\n private highlightCell(\n model: OncoprintModel,\n track_id: TrackId,\n uid: ColumnId\n ) {\n this.overlayStrokeRect(\n model.getZoomedColumnLeft(uid) - this.scroll_x,\n model.getCellTops(track_id) - this.scroll_y,\n model.getCellWidth() +\n (model.getTrackHasColumnSpacing(track_id)\n ? 0\n : model.getCellPadding()),\n model.getCellHeight(track_id),\n 'rgba(0,0,0,1)'\n );\n }\n\n private highlightTrack(model: OncoprintModel, track_id: TrackId) {\n const highlight_width =\n model.getCellWidth() +\n (model.getTrackHasColumnSpacing(track_id)\n ? 0\n : model.getCellPadding());\n const cell_height = model.getCellHeight(track_id);\n const uids = model.getIdOrder();\n const left = model.getZoomedColumnLeft();\n const top = model.getCellTops(track_id) - this.scroll_y;\n\n for (const uid of uids) {\n if (model.getTrackDatum(track_id, uid) !== null && uid in left) {\n this.overlayStrokeRect(\n left[uid] - this.scroll_x,\n top,\n highlight_width,\n cell_height,\n CELL_HIGHLIGHT_STROKE\n );\n }\n }\n }\n\n private highlightColumn(model: OncoprintModel, uid: ColumnId) {\n const left = model.getZoomedColumnLeft(uid) - this.scroll_x;\n const cell_padding = model.getCellPadding();\n const cell_width = model.getCellWidth();\n const tracks = model.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n if (model.getTrackDatum(tracks[i], uid) !== null) {\n this.overlayStrokeRect(\n left,\n model.getCellTops(tracks[i]) - this.scroll_y,\n cell_width +\n (model.getTrackHasColumnSpacing(tracks[i])\n ? 0\n : cell_padding),\n model.getCellHeight(tracks[i]),\n CELL_HIGHLIGHT_STROKE\n );\n }\n }\n this.overlayColumnLabelHighlight(model, uid);\n }\n\n public getViewportOncoprintSpace(model: OncoprintModel) {\n const scroll_y = this.scroll_y;\n const zoom_y = model.getVertZoom();\n\n const id_order = model.getIdOrder();\n const left_index = model.getClosestColumnIndexToLeft(\n this.scroll_x,\n true\n );\n const left_id = id_order[left_index];\n const right_index = model.getClosestColumnIndexToLeft(\n this.scroll_x + this.visible_area_width,\n true,\n true\n );\n\n let right;\n if (right_index < id_order.length) {\n right = model.getColumnLeft(id_order[right_index]);\n } else {\n right =\n model.getColumnLeft(id_order[id_order.length - 1]) +\n model.getCellWidth(true);\n }\n\n return {\n top: Math.round(scroll_y / zoom_y),\n bottom: Math.round(\n (scroll_y + this.getVisibleAreaHeight(model)) / zoom_y\n ),\n left: model.getColumnLeft(left_id),\n right,\n center_col_index: Math.floor((right_index + left_index) / 2),\n };\n }\n\n public isUsable() {\n return this.ctx !== null;\n }\n\n public removeTrack(model: OncoprintModel, track_id: TrackId) {\n this.deleteBuffers(model, track_id);\n\n delete this.specific_shapes[track_id];\n delete this.vertex_data[track_id];\n delete this.vertex_column_array[track_id];\n delete this.id_to_first_vertex_index[track_id];\n delete this.is_buffer_empty[track_id];\n delete this.universal_shapes[track_id];\n\n if (!this.rendering_suppressed) {\n this.renderAllTracks(model);\n }\n }\n\n public moveTrack(model: OncoprintModel) {\n if (!this.rendering_suppressed) {\n this.renderAllTracks(model);\n }\n }\n\n public setTrackGroupOrder(model: OncoprintModel) {\n if (!this.rendering_suppressed) {\n this.renderAllTracks(model);\n }\n }\n\n public setTrackShowGaps(model: OncoprintModel) {\n if (!this.rendering_suppressed) {\n // shader depends on gaps\n this.setUpShaders(model);\n this.renderAllTracks(model);\n }\n }\n\n public setColumnLabels(model: OncoprintModel) {\n if (!this.rendering_suppressed) {\n this.renderAllTracks(model);\n }\n }\n\n public addTracks(model: OncoprintModel, track_ids: TrackId[]) {\n if (this.rendering_suppressed) {\n return;\n }\n for (let i = 0; i < track_ids.length; i++) {\n this.getShapes(model, track_ids[i]);\n this.computeVertexPositionsAndVertexColors(model, track_ids[i]);\n this.computeVertexColumns(model, track_ids[i]);\n }\n this.renderAllTracks(model);\n }\n public setIdOrder(model: OncoprintModel, ids: ColumnId[]) {\n if (this.rendering_suppressed) {\n return;\n }\n const track_ids = model.getTracks();\n for (let i = 0; i < track_ids.length; i++) {\n this.computeVertexColumns(model, track_ids[i]);\n }\n this.renderAllTracks(model);\n }\n public setTrackGroupSortPriority(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n this.renderAllTracks(model);\n }\n public sort(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n const track_ids = model.getTracks();\n for (let i = 0; i < track_ids.length; i++) {\n this.computeVertexPositionsAndVertexColors(model, track_ids[i]); // need to recompute because the vertexes are in sorted order for clipping\n this.computeVertexColumns(model, track_ids[i]);\n }\n this.renderAllTracks(model);\n }\n public suppressRendering() {\n this.rendering_suppressed = true;\n }\n public releaseRendering(model: OncoprintModel) {\n this.rendering_suppressed = false;\n this.updateAntialiasSetting(model);\n const track_ids = model.getTracks();\n for (let i = 0; i < track_ids.length; i++) {\n this.getShapes(model, track_ids[i]);\n this.computeVertexPositionsAndVertexColors(model, track_ids[i]);\n this.computeVertexColumns(model, track_ids[i]);\n }\n this.setUpShaders(model); // due to possible changes in gaps\n this.renderAllTracks(model);\n }\n public hideIds(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n const track_ids = model.getTracks();\n for (let i = 0; i < track_ids.length; i++) {\n this.computeVertexColumns(model, track_ids[i]);\n }\n this.renderAllTracks(model);\n }\n public setTrackImportantIds(model: OncoprintModel, track_id: TrackId) {\n if (this.rendering_suppressed) {\n return;\n }\n this.getShapes(model, track_id);\n this.computeVertexPositionsAndVertexColors(model, track_id);\n this.computeVertexColumns(model, track_id);\n this.renderAllTracks(model);\n }\n public setTrackData(model: OncoprintModel, track_id: TrackId) {\n if (this.rendering_suppressed) {\n return;\n }\n this.getShapes(model, track_id);\n this.computeVertexPositionsAndVertexColors(model, track_id);\n this.computeVertexColumns(model, track_id);\n this.renderAllTracks(model);\n }\n public setRuleSet(model: OncoprintModel, target_track_id: TrackId) {\n if (this.rendering_suppressed) {\n return;\n }\n this.getShapes(model, target_track_id);\n this.computeVertexPositionsAndVertexColors(model, target_track_id);\n this.renderAllTracks(model);\n }\n public shareRuleSet(model: OncoprintModel, target_track_id: TrackId) {\n if (this.rendering_suppressed) {\n return;\n }\n this.getShapes(model, target_track_id);\n this.computeVertexPositionsAndVertexColors(model, target_track_id);\n this.renderAllTracks(model);\n }\n public setSortConfig(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n this.sort(model);\n }\n\n public setHorzScroll(model: OncoprintModel) {\n this.setScroll(model);\n }\n\n public setVertScroll(model: OncoprintModel) {\n this.setScroll(model);\n }\n\n public setScroll(model: OncoprintModel) {\n this.scroll_x = model.getHorzScroll();\n this.scroll_y = model.getVertScroll();\n if (!this.rendering_suppressed) {\n this.renderAllTracks(model, true);\n }\n }\n\n private updateAntialiasSetting(model: OncoprintModel) {\n const cell_width = model.getCellWidth();\n if (cell_width < this.antialias_on_cell_width_thresh) {\n if (!this.antialias) {\n this.antialias = true;\n this.refreshCanvas(model);\n }\n } else {\n if (this.antialias) {\n this.antialias = false;\n this.refreshCanvas(model);\n }\n }\n }\n\n public setZoom(model: OncoprintModel) {\n if (!this.rendering_suppressed) {\n this.updateAntialiasSetting(model);\n this.renderAllTracks(model);\n }\n }\n\n public setHorzZoom(model: OncoprintModel) {\n if (!this.rendering_suppressed) {\n this.updateAntialiasSetting(model);\n this.renderAllTracks(model);\n }\n }\n\n public setVertZoom(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n this.renderAllTracks(model);\n }\n\n public setTrackGroupHeader(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n this.renderAllTracks(model);\n }\n\n public setViewport(model: OncoprintModel) {\n this.scroll_x = model.getHorzScroll();\n this.scroll_y = model.getVertScroll();\n if (!this.rendering_suppressed) {\n this.updateAntialiasSetting(model);\n this.renderAllTracks(model);\n }\n }\n\n public getTotalWidth(model: OncoprintModel, base?: boolean) {\n let width = model.getOncoprintWidth(base);\n\n if (this.maximum_column_label_width > 0) {\n width += this.maximum_column_label_width;\n }\n\n return width;\n }\n\n public getVisibleAreaWidth() {\n return this.visible_area_width;\n }\n\n public setWidth(w: number, model: OncoprintModel) {\n this.visible_area_width = w;\n if (this.rendering_suppressed) {\n return;\n }\n this.renderAllTracks(model); // in the process it will call resizeAndClear\n }\n\n private getColumnLabelsHeight() {\n let height = 0;\n\n if (this.maximum_column_label_height > 0) {\n height += COLUMN_LABEL_MARGIN;\n height += this.maximum_column_label_height;\n }\n\n return height;\n }\n\n public getTotalHeight(model: OncoprintModel) {\n return model.getOncoprintHeight() + this.getColumnLabelsHeight();\n }\n\n public getVisibleAreaHeight(model: OncoprintModel) {\n return (\n Math.min(model.getOncoprintHeight(), model.max_height) +\n this.getColumnLabelsHeight()\n );\n }\n\n public setCellPaddingOn(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n const track_ids = model.getTracks();\n for (let i = 0; i < track_ids.length; i++) {\n if (!model.getTrackHasColumnSpacing(track_ids[i])) {\n // We need to recompute shapes for tracks that don't have column spacing,\n // because for those we're redefining the base width for shape generation.\n this.getShapes(model, track_ids[i]);\n this.computeVertexPositionsAndVertexColors(model, track_ids[i]);\n }\n this.computeVertexColumns(model, track_ids[i]);\n }\n this.renderAllTracks(model);\n }\n\n public setHighlightedIds(model: OncoprintModel) {\n this.clearOverlay();\n this.highlightHighlightedIds(model);\n this.highlightHighlightedTracks(model);\n }\n\n public setHighlightedTracks(model: OncoprintModel) {\n this.clearOverlay();\n this.highlightHighlightedIds(model);\n this.highlightHighlightedTracks(model);\n }\n\n public highlightHighlightedIds(\n model: OncoprintModel,\n opt_exclude_ids?: ColumnId[]\n ) {\n // Highlight highlighted ids\n const highlightedIds = model.getVisibleHighlightedIds();\n for (let i = 0; i < highlightedIds.length; i++) {\n if (\n !opt_exclude_ids ||\n opt_exclude_ids.indexOf(highlightedIds[i]) === -1\n ) {\n this.highlightColumn(model, highlightedIds[i]);\n }\n }\n }\n\n public highlightHighlightedTracks(model: OncoprintModel) {\n // Highlight highlighted ids\n const highlightedTracks = model.getHighlightedTracks();\n for (let i = 0; i < highlightedTracks.length; i++) {\n this.highlightTrack(model, highlightedTracks[i]);\n }\n }\n\n public getDummyScrollDivClientSize() {\n return this.dummy_scroll_div_client_size.get();\n }\n\n public toSVGGroup(\n model: OncoprintModel,\n offset_x: number,\n offset_y: number\n ) {\n const root = svgfactory.group(offset_x || 0, offset_y || 0);\n const cell_tops = model.getCellTops();\n const tracks = model.getTracks();\n const zoomedColumnLeft = model.getZoomedColumnLeft();\n // add cell shapes\n for (let i = 0; i < tracks.length; i++) {\n const track_id = tracks[i];\n const offset_y = cell_tops[track_id];\n const universal_shapes = model.getTrackUniversalShapes(\n track_id,\n false\n );\n const identified_shape_list_list = model.getSpecificShapesForData(\n track_id,\n false\n );\n for (let j = 0; j < identified_shape_list_list.length; j++) {\n const id_sl = identified_shape_list_list[j];\n const id = id_sl.id;\n const sl = id_sl.shape_list;\n const offset_x = zoomedColumnLeft[id];\n if (typeof offset_x === 'undefined') {\n // hidden id\n continue;\n }\n\n // draw universal shapes first\n for (let h = 0; h < universal_shapes.length; h++) {\n root.appendChild(\n svgfactory.fromShape(\n universal_shapes[h],\n offset_x,\n offset_y\n )\n );\n }\n // next draw specific shapes\n for (let h = 0; h < sl.length; h++) {\n root.appendChild(\n svgfactory.fromShape(sl[h], offset_x, offset_y)\n );\n }\n }\n }\n // add column labels\n const labels = model.getColumnLabels();\n const left = model.getZoomedColumnLeft();\n const ids_with_labels = Object.keys(labels);\n const column_label_y = model.getOncoprintHeight() + 10;\n const font_size = OncoprintWebGLCellView.getColumnLabelsFontSize(model);\n const cell_width = model.getCellWidth();\n for (let i = 0; i < ids_with_labels.length; i++) {\n const id = ids_with_labels[i];\n\n if (!(id in left)) {\n // skip hidden id\n continue;\n }\n\n const label = labels[id];\n\n const x = left[id] + cell_width / 2;\n if (label.circle_color) {\n // add circle\n const spec = this.getColumnLabelCircleSpec(model);\n root.appendChild(\n makeSvgElement('ellipse', {\n cx: x,\n cy: column_label_y,\n rx: spec.radius,\n ry: spec.radius,\n stroke: 'rgba(0,0,0,0)',\n fill: label.circle_color,\n })\n );\n }\n\n const text_x =\n x + ((label.left_padding_percent || 0) / 100) * cell_width;\n\n const angle = ifndef(label.angle_in_degrees, COLUMN_LABEL_ANGLE);\n const textElt = makeSvgElement('text', {\n x: text_x,\n y: column_label_y,\n fill: label.text_color || '#000000',\n 'font-size': font_size,\n 'font-family': 'Arial',\n 'font-weight': 'normal',\n 'text-anchor': 'start',\n transform:\n 'rotate(' +\n angle +\n ',' +\n text_x +\n ',' +\n column_label_y +\n ')',\n 'alignment-baseline': 'middle',\n });\n\n textElt.textContent = label.text;\n root.appendChild(textElt);\n }\n\n return root;\n }\n\n public destroy() {\n this.$overlay_canvas.off(); // clear all handlers so that it can be garbage collected\n $(document).off('mousemove', this.mouseMoveHandler);\n }\n}\n","import svgfactory from './svgfactory';\nimport $ from 'jquery';\nimport makeSvgElement from './makesvgelement';\nimport OncoprintModel, { TrackId, TrackProp } from './oncoprintmodel';\nimport OncoprintToolTip from './oncoprinttooltip';\nimport Oncoprint from './oncoprint';\n\nconst CIRCLE_X = 25;\n\nexport default class OncoprintLabelView {\n private supersampling_ratio = 2;\n private base_font_size = 14;\n // stuff from model\n private track_tops: TrackProp<number> = {};\n private cell_tops: TrackProp<number> = {};\n private cell_tops_view_space: TrackProp<number> = {};\n private cell_tops_this_space: TrackProp<number> = {};\n private cell_heights: TrackProp<number> = {};\n private cell_heights_view_space: TrackProp<number> = {};\n private cell_heights_this_space: TrackProp<number> = {};\n private label_middles_view_space: TrackProp<number> = {};\n private label_middles_this_space: TrackProp<number> = {};\n private label_left_padding: TrackProp<number> = {};\n private labels: TrackProp<string> = {};\n private sublabels: TrackProp<string> = {};\n private label_colors: TrackProp<string> = {};\n private label_circle_colors: TrackProp<string> = {};\n private label_font_weight: TrackProp<string> = {};\n private html_labels: TrackProp<string> = {};\n private track_link_urls: TrackProp<string> = {};\n private track_descriptions: TrackProp<string> = {};\n private minimum_track_height = Number.POSITIVE_INFINITY;\n private maximum_label_width = Number.NEGATIVE_INFINITY;\n private tracks: TrackId[] = [];\n private show_sublabels: boolean;\n\n private rendering_suppressed = false;\n private highlighted_track_label_only: TrackId | null = null;\n private drag_callback: (\n target_track: TrackId,\n new_previous_track: TrackId\n ) => void;\n private dragged_label_track_id: TrackId | null;\n private drag_mouse_y: number | null;\n private scroll_y: number = 0;\n private ctx: CanvasRenderingContext2D;\n\n constructor(\n private $canvas: JQuery<HTMLCanvasElement>,\n private model: OncoprintModel,\n private tooltip: OncoprintToolTip\n ) {\n const view = this;\n this.show_sublabels = model.getShowTrackSublabels();\n\n this.setUpContext();\n\n (function setUpDragging(view) {\n view.drag_callback = function(target_track, new_previous_track) {};\n view.dragged_label_track_id = null;\n view.drag_mouse_y = null;\n\n view.$canvas.on('mousedown', function(evt) {\n view.tooltip.hide();\n const track_id = view.isMouseOnLabel(evt.offsetY);\n if (\n track_id !== null &&\n model.getContainingTrackGroup(track_id).length > 1 &&\n !model.isTrackInClusteredGroup(track_id) &&\n model.getTrackMovable(track_id)\n ) {\n view.startDragging(model, track_id, evt.offsetY);\n }\n });\n\n view.$canvas.on('mousemove', function(evt) {\n if (view.dragged_label_track_id !== null) {\n const track_group = model.getContainingTrackGroup(\n view.dragged_label_track_id\n );\n const bottommost_track = model.getLastExpansion(\n track_group[track_group.length - 1]\n );\n const max_drag_y =\n view.track_tops[bottommost_track] +\n model.getTrackHeight(bottommost_track) -\n view.scroll_y;\n const min_drag_y =\n view.track_tops[track_group[0]] - 5 - view.scroll_y;\n view.drag_mouse_y = Math.min(\n evt.pageY - view.$canvas.offset().top,\n max_drag_y\n );\n view.drag_mouse_y = Math.max(view.drag_mouse_y, min_drag_y);\n view.renderAllLabels(model);\n } else {\n const hovered_track = view.isMouseOnLabel(\n evt.pageY - view.$canvas.offset().top\n );\n if (hovered_track !== null) {\n const $tooltip_div = $('<div>');\n const offset = view.$canvas[0].getBoundingClientRect();\n if (\n view.isNecessaryToShortenLabel(\n view.labels[hovered_track]\n ) ||\n view.track_link_urls[hovered_track]\n ) {\n $tooltip_div.append(\n OncoprintLabelView.formatTooltipHeader(\n view.labels[hovered_track],\n view.html_labels[hovered_track],\n view.track_link_urls[hovered_track]\n )\n );\n }\n const track_description =\n view.track_descriptions[hovered_track];\n if (track_description.length > 0) {\n $tooltip_div.append(\n $('<div>').text(track_description)\n );\n }\n // dragging info\n if (model.getTrackMovable(hovered_track)) {\n if (model.isTrackInClusteredGroup(hovered_track)) {\n view.$canvas.css('cursor', 'not-allowed');\n $tooltip_div.append(\n '<b>dragging disabled for clustered tracks</b>'\n );\n } else if (\n model.getContainingTrackGroup(hovered_track)\n .length > 1\n ) {\n view.$canvas.css('cursor', 'move');\n $tooltip_div.append('<b>hold to drag</b>');\n }\n }\n if ($tooltip_div.contents().length > 0) {\n view.tooltip.fadeIn(\n 200,\n view.renderedLabelWidth(\n view.labels[hovered_track]\n ) + offset.left,\n view.cell_tops[hovered_track] +\n offset.top -\n view.scroll_y,\n $tooltip_div\n );\n }\n } else {\n view.$canvas.css('cursor', 'auto');\n view.tooltip.hide();\n }\n }\n });\n\n view.$canvas.on('mouseup mouseleave', function(evt) {\n if (view.dragged_label_track_id !== null) {\n const track_group = model.getContainingTrackGroup(\n view.dragged_label_track_id\n );\n const previous_track_id = view.getLabelAboveMouseSpace(\n track_group,\n evt.offsetY,\n view.dragged_label_track_id\n );\n view.stopDragging(model, previous_track_id);\n }\n view.tooltip.hideIfNotAlreadyGoingTo(150);\n });\n })(this);\n }\n\n private circleRadius() {\n return (this.minimum_track_height * 0.8) / 2;\n }\n\n private renderedLabelWidth(label: string) {\n return (\n this.ctx.measureText(this.shortenLabelIfNecessary(label)).width /\n this.supersampling_ratio\n );\n }\n\n private updateFromModel(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n this.show_sublabels = model.getShowTrackSublabels();\n this.scroll_y = model.getVertScroll();\n this.track_tops = model.getZoomedTrackTops() as TrackProp<number>;\n this.cell_tops = model.getCellTops() as TrackProp<number>;\n this.cell_tops_this_space = {};\n this.cell_heights = {};\n this.tracks = model.getTracks();\n this.track_descriptions = {};\n\n this.ctx.font = 'bold ' + this.getFontSize() + 'px Arial';\n this.minimum_track_height = Number.POSITIVE_INFINITY;\n this.maximum_label_width = 0;\n for (let i = 0; i < this.tracks.length; i++) {\n this.minimum_track_height = Math.min(\n this.minimum_track_height,\n model.getTrackHeight(this.tracks[i])\n );\n const shortened_label = this.shortenLabelIfNecessary(\n this.labels[this.tracks[i]]\n );\n const shortened_sublabel = this.shortenLabelIfNecessary(\n this.sublabels[this.tracks[i]]\n );\n const measured_width =\n this.ctx.measureText(shortened_label).width +\n (this.show_sublabels\n ? this.ctx.measureText(shortened_sublabel).width\n : 0);\n this.maximum_label_width = Math.max(\n this.maximum_label_width,\n measured_width\n );\n\n this.cell_tops_this_space[this.tracks[i]] =\n this.cell_tops[this.tracks[i]] * this.supersampling_ratio -\n this.scroll_y * this.supersampling_ratio;\n this.track_descriptions[this.tracks[i]] = model.getTrackDescription(\n this.tracks[i]\n );\n this.cell_heights[this.tracks[i]] = model.getCellHeight(\n this.tracks[i]\n );\n this.cell_heights_this_space[this.tracks[i]] =\n this.cell_heights[this.tracks[i]] * this.supersampling_ratio;\n this.label_middles_this_space[this.tracks[i]] =\n this.cell_tops_this_space[this.tracks[i]] +\n this.cell_heights_this_space[this.tracks[i]] / 2;\n }\n }\n private setUpContext() {\n this.ctx = this.$canvas[0].getContext('2d');\n this.ctx.textAlign = 'start';\n this.ctx.textBaseline = 'middle';\n }\n private resizeAndClear(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n if (this.rendering_suppressed) {\n return;\n }\n const visible_height = getCellViewHeight();\n const visible_width = this.getWidth();\n this.$canvas[0].height = this.supersampling_ratio * visible_height;\n this.$canvas[0].width = this.supersampling_ratio * visible_width;\n this.$canvas[0].style.height = visible_height + 'px';\n this.$canvas[0].style.width = visible_width + 'px';\n this.setUpContext();\n }\n private isNecessaryToShortenLabel(label: string) {\n return label.length > this.getMaximumLabelLength();\n }\n private shortenLabelIfNecessary(label: string) {\n if (this.isNecessaryToShortenLabel(label)) {\n return label.substring(0, this.getMaximumLabelLength() - 3) + '...';\n } else {\n return label;\n }\n }\n private static formatTooltipHeader(\n label: string,\n html_label: any,\n link_url: string\n ) {\n let header_contents;\n if (link_url) {\n header_contents = $(\n '<a target=\"_blank\" rel=\"noopener noreferrer\">'\n ).attr('href', link_url);\n } else {\n header_contents = $('<span>');\n }\n header_contents.append(html_label || document.createTextNode(label));\n return $('<b style=\"display: block;\">').append(header_contents);\n }\n private renderAllLabels(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n this.ctx.clearRect(0, 0, this.$canvas[0].width, this.$canvas[0].height);\n\n const highlightedTracks = [];\n highlightedTracks.push(...model.getHighlightedTracks());\n if (this.highlighted_track_label_only !== null) {\n highlightedTracks.push(this.highlighted_track_label_only);\n }\n for (const track_id of highlightedTracks) {\n if (this.cell_tops_this_space.hasOwnProperty(track_id)) {\n this.ctx.fillStyle = 'rgba(255,255,0,0.4)';\n this.ctx.fillRect(\n 0,\n this.cell_tops_this_space[track_id],\n this.getWidth() * this.supersampling_ratio,\n this.cell_heights_this_space[track_id]\n );\n }\n }\n const font_size = this.getFontSize();\n const tracks = this.tracks;\n const sublabelX: TrackProp<number> = {};\n for (let i = 0; i < tracks.length; i++) {\n if (this.label_circle_colors[tracks[i]]) {\n // draw circle if specified\n this.ctx.fillStyle = this.label_circle_colors[tracks[i]];\n this.ctx.beginPath();\n this.ctx.arc(\n CIRCLE_X * this.supersampling_ratio,\n this.label_middles_this_space[tracks[i]],\n this.supersampling_ratio * this.circleRadius(),\n 0,\n 2 * Math.PI\n );\n this.ctx.fill();\n }\n\n this.ctx.font =\n (this.label_font_weight[tracks[i]] || 'bold') +\n ' ' +\n font_size +\n 'px Arial';\n this.ctx.fillStyle = 'black';\n if (this.label_colors && this.label_colors[tracks[i]]) {\n //override color, if set:\n this.ctx.fillStyle = this.label_colors[tracks[i]];\n }\n const label = this.shortenLabelIfNecessary(this.labels[tracks[i]]);\n this.ctx.fillText(\n label,\n this.label_left_padding[tracks[i]] * this.supersampling_ratio,\n this.label_middles_this_space[tracks[i]]\n );\n sublabelX[tracks[i]] = this.ctx.measureText(label).width;\n }\n if (this.show_sublabels) {\n // render sublabels - not bold, gray\n this.ctx.font = font_size + 'px Arial';\n this.ctx.fillStyle = 'rgb(166,166,166)';\n for (let i = 0; i < tracks.length; i++) {\n if (this.sublabels[tracks[i]]) {\n this.ctx.fillText(\n this.shortenLabelIfNecessary(this.sublabels[tracks[i]]),\n sublabelX[tracks[i]],\n this.label_middles_this_space[tracks[i]]\n );\n }\n }\n }\n if (this.dragged_label_track_id !== null) {\n this.ctx.font = 'bold ' + font_size + 'px Arial';\n this.ctx.fillStyle = 'rgba(255,0,0,0.95)';\n this.ctx.fillText(\n this.shortenLabelIfNecessary(\n this.labels[this.dragged_label_track_id]\n ),\n 0,\n this.supersampling_ratio * this.drag_mouse_y\n );\n this.ctx.fillStyle = 'rgba(0,0,0,0.15)';\n const group = this.model.getContainingTrackGroup(\n this.dragged_label_track_id\n );\n const label_above_mouse = this.model.getLastExpansion(\n this.getLabelAboveMouseSpace(group, this.drag_mouse_y, null)\n );\n const label_below_mouse = this.getLabelBelowMouseSpace(\n group,\n this.drag_mouse_y,\n null\n );\n let rect_y, rect_height;\n if (\n label_above_mouse === this.dragged_label_track_id ||\n label_below_mouse === this.dragged_label_track_id\n ) {\n return;\n }\n if (label_above_mouse !== null && label_below_mouse !== null) {\n rect_y =\n this.cell_tops_this_space[label_above_mouse] +\n this.cell_heights_this_space[label_above_mouse];\n rect_height =\n this.cell_tops_this_space[label_below_mouse] - rect_y;\n } else if (label_above_mouse === null) {\n rect_y =\n this.cell_tops_this_space[group[0]] -\n this.ctx.measureText('m').width;\n rect_height = this.ctx.measureText('m').width;\n } else if (label_below_mouse === null) {\n rect_y =\n this.cell_tops_this_space[label_above_mouse] +\n this.cell_heights_this_space[label_above_mouse];\n rect_height = this.ctx.measureText('m').width;\n }\n\n const min_rect_height = 4;\n rect_height = Math.max(rect_height, min_rect_height);\n this.ctx.fillRect(\n this.label_left_padding[tracks[tracks.length - 1]] *\n this.supersampling_ratio,\n rect_y,\n this.getWidth() * this.supersampling_ratio,\n rect_height\n );\n }\n }\n\n private isMouseOnLabel(mouse_y: number) {\n const candidate_track = this.getLabelAboveMouseSpace(\n this.tracks,\n mouse_y,\n null\n );\n if (candidate_track === null) {\n return null;\n }\n if (\n mouse_y <=\n this.cell_tops[candidate_track] -\n this.scroll_y +\n this.cell_heights[candidate_track]\n ) {\n return candidate_track;\n } else {\n return null;\n }\n }\n private getLabelAboveMouseSpace(\n track_ids: TrackId[],\n y: number,\n track_to_exclude: TrackId | null\n ) {\n if (y < this.cell_tops[track_ids[0]] - this.scroll_y) {\n return null;\n } else {\n let candidate_track = null;\n for (let i = 0; i < track_ids.length; i++) {\n if (\n track_to_exclude !== null &&\n track_to_exclude === track_ids[i]\n ) {\n continue;\n }\n if (this.cell_tops[track_ids[i]] - this.scroll_y > y) {\n break;\n } else {\n candidate_track = track_ids[i];\n }\n }\n return candidate_track;\n }\n }\n private getLabelBelowMouseSpace(\n track_ids: TrackId[],\n y: number,\n track_to_exclude: TrackId | null\n ) {\n if (\n y >\n this.cell_tops[track_ids[track_ids.length - 1]] - this.scroll_y\n ) {\n return null;\n } else {\n let candidate_track = null;\n for (let i = track_ids.length - 1; i >= 0; i--) {\n if (\n track_to_exclude !== null &&\n track_to_exclude === track_ids[i]\n ) {\n continue;\n }\n if (this.cell_tops[track_ids[i]] - this.scroll_y < y) {\n break;\n } else {\n candidate_track = track_ids[i];\n }\n }\n return candidate_track;\n }\n }\n\n private startDragging(\n model: OncoprintModel,\n track_id: TrackId,\n mouse_y: number\n ) {\n this.dragged_label_track_id = track_id;\n this.drag_mouse_y = mouse_y;\n this.renderAllLabels(model);\n }\n private stopDragging(\n model: OncoprintModel,\n new_previous_track_id: TrackId\n ) {\n this.drag_callback(this.dragged_label_track_id, new_previous_track_id);\n this.dragged_label_track_id = null;\n this.renderAllLabels(model);\n }\n\n private getMaximumLabelLength() {\n return 18;\n }\n\n public getWidth() {\n if (this.model.getShowTrackLabels()) {\n return Math.max(\n this.maximum_label_width / this.supersampling_ratio + 10,\n 70\n );\n } else {\n return 0;\n }\n }\n public getFontSize(no_supersampling_adjustment?: boolean) {\n return (\n (no_supersampling_adjustment ? 1 : this.supersampling_ratio) *\n Math.max(\n Math.min(this.base_font_size, this.minimum_track_height),\n 7\n )\n );\n }\n public setDragCallback(callback: OncoprintLabelView['drag_callback']) {\n this.drag_callback = callback;\n }\n public removeTrack(model: OncoprintModel, getCellViewHeight: () => number) {\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n public moveTrack(model: OncoprintModel, getCellViewHeight: () => number) {\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n public setTrackGroupOrder(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n public setShowTrackLabels(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n public addTracks(\n model: OncoprintModel,\n track_ids: TrackId[],\n getCellViewHeight: () => number\n ) {\n for (let i = 0; i < track_ids.length; i++) {\n this.labels[track_ids[i]] = model.getTrackLabel(track_ids[i]);\n this.sublabels[track_ids[i]] = model.getTrackSublabel(track_ids[i]);\n this.label_colors[track_ids[i]] = model.getTrackLabelColor(\n track_ids[i]\n );\n this.label_circle_colors[\n track_ids[i]\n ] = model.getTrackLabelCircleColor(track_ids[i]);\n this.label_left_padding[\n track_ids[i]\n ] = model.getTrackLabelLeftPadding(track_ids[i]);\n this.label_font_weight[\n track_ids[i]\n ] = model.getTrackLabelFontWeight(track_ids[i]);\n this.html_labels[track_ids[i]] = model.getOptionalHtmlTrackLabel(\n track_ids[i]\n );\n this.track_link_urls[track_ids[i]] = model.getTrackLinkUrl(\n track_ids[i]\n );\n }\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n\n public setShowTrackSublabels(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n\n public setScroll(model: OncoprintModel, getCellViewHeight: () => number) {\n this.setVertScroll(model, getCellViewHeight);\n }\n\n public setHorzScroll(model: OncoprintModel) {}\n\n public setViewport(model: OncoprintModel, getCellViewHeight: () => number) {\n this.setVertScroll(model, getCellViewHeight);\n }\n\n public setVertScroll(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n\n public setVertZoom(model: OncoprintModel, getCellViewHeight: () => number) {\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n\n public setZoom(model: OncoprintModel, getCellViewHeight: () => number) {\n this.setVertZoom(model, getCellViewHeight);\n }\n\n public highlightTrackLabelOnly(track_id: TrackId, model: OncoprintModel) {\n // track_id is a track id, or null to clear highlight\n this.highlighted_track_label_only = track_id;\n this.renderAllLabels(model);\n }\n\n public setHighlightedTracks(model: OncoprintModel) {\n this.renderAllLabels(model);\n }\n\n public setTrackMovable(model: OncoprintModel) {\n this.renderAllLabels(model);\n }\n\n public setTrackGroupHeader(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n\n public sort(model: OncoprintModel, getCellViewHeight: () => number) {\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n\n public suppressRendering() {\n this.rendering_suppressed = true;\n }\n\n public releaseRendering(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.rendering_suppressed = false;\n this.updateFromModel(model);\n this.resizeAndClear(model, getCellViewHeight);\n this.renderAllLabels(model);\n }\n\n public toSVGGroup(\n model: OncoprintModel,\n full_labels: boolean,\n offset_x: number,\n offset_y: number\n ) {\n const root = svgfactory.group(offset_x || 0, offset_y || 0);\n if (!model.getShowTrackLabels()) {\n // dont add anything if hiding track labels\n return root;\n }\n\n const cell_tops = model.getCellTops() as TrackProp<number>;\n const tracks = model.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track_id = tracks[i];\n const y = cell_tops[track_id] + model.getCellHeight(track_id) / 2;\n const label = model.getTrackLabel(track_id);\n const circleColor = model.getTrackLabelCircleColor(track_id);\n if (circleColor) {\n // add circle\n root.appendChild(\n makeSvgElement('ellipse', {\n cx: CIRCLE_X.toString(),\n cy: y.toString(),\n rx: this.circleRadius().toString(),\n ry: this.circleRadius().toString(),\n stroke: 'rgba(0,0,0,0)',\n fill: circleColor,\n })\n );\n }\n const text_elt = svgfactory.text(\n full_labels ? label : this.shortenLabelIfNecessary(label),\n model.getTrackLabelLeftPadding(track_id),\n y,\n this.getFontSize(true),\n 'Arial',\n model.getTrackLabelFontWeight(track_id) || 'bold',\n 'bottom',\n circleColor ? 'white' : 'black'\n );\n text_elt.setAttribute('dy', '0.35em');\n root.appendChild(text_elt);\n }\n return root;\n }\n}\n","// Colours for the oncoprint heatmap feature\n// viridis comes from matplotlib's default colour set, created by Stéfan van der Walt and Nathaniel Smith\n\nimport { RGBAColor } from './oncoprintruleset';\n\nexport default {\n viridis: [\n [68.08602, 1.24287, 84.000825, 1.0],\n [68.47005, 2.449275, 85.533885, 1.0],\n [68.83572, 3.729375, 87.051645, 1.0],\n [69.182775, 5.08521, 88.553595, 1.0],\n [69.51147, 6.518565, 90.038715, 1.0],\n [69.821295, 8.031735, 91.507515, 1.0],\n [70.11276, 9.62676, 92.958465, 1.0],\n [70.38561, 11.262585, 94.39182, 1.0],\n [70.63959, 12.83772, 95.807325, 1.0],\n [70.874955, 14.36262, 97.203705, 1.0],\n [71.091705, 15.846975, 98.58096, 1.0],\n [71.28933, 17.29818, 99.938835, 1.0],\n [71.468085, 18.721335, 101.276565, 1.0],\n [71.62797, 20.121285, 102.593895, 1.0],\n [71.76873, 21.5016, 103.89057, 1.0],\n [71.89062, 22.86483, 105.165825, 1.0],\n [71.993385, 24.213525, 106.419405, 1.0],\n [72.07728, 25.54998, 107.6508, 1.0],\n [72.14205, 26.875215, 108.86001, 1.0],\n [72.188205, 28.191015, 110.04627, 1.0],\n [72.215235, 29.4984, 111.209325, 1.0],\n [72.223395, 30.798135, 112.34892, 1.0],\n [72.212685, 32.09124, 113.4648, 1.0],\n [72.18336, 33.378225, 114.556455, 1.0],\n [72.13542, 34.6596, 115.623885, 1.0],\n [72.068865, 35.93613, 116.666835, 1.0],\n [71.98395, 37.20756, 117.68505, 1.0],\n [71.881185, 38.474655, 118.678275, 1.0],\n [71.76006, 39.73767, 119.646255, 1.0],\n [71.62134, 40.996605, 120.589245, 1.0],\n [71.465025, 42.251715, 121.50699, 1.0],\n [71.29137, 43.502745, 122.399235, 1.0],\n [71.10063, 44.74995, 123.266235, 1.0],\n [70.89306, 45.993585, 124.107735, 1.0],\n [70.66917, 47.23314, 124.92399, 1.0],\n [70.42947, 48.46887, 125.715255, 1.0],\n [70.173705, 49.700775, 126.481275, 1.0],\n [69.90264, 50.928855, 127.222305, 1.0],\n [69.61653, 52.1526, 127.938855, 1.0],\n [69.31614, 53.372265, 128.63067, 1.0],\n [69.001725, 54.587595, 129.29826, 1.0],\n [68.67354, 55.79859, 129.942135, 1.0],\n [68.33184, 57.004995, 130.56204, 1.0],\n [67.9779, 58.20681, 131.158995, 1.0],\n [67.611975, 59.40378, 131.732745, 1.0],\n [67.234065, 60.595905, 132.28431, 1.0],\n [66.84519, 61.78293, 132.813435, 1.0],\n [66.445605, 62.96511, 133.32114, 1.0],\n [66.036075, 64.141935, 133.80768, 1.0],\n [65.61711, 65.31315, 134.273565, 1.0],\n [65.189475, 66.479265, 134.71956, 1.0],\n [64.753425, 67.63977, 135.145665, 1.0],\n [64.30947, 68.794665, 135.552645, 1.0],\n [63.858375, 69.94395, 135.941265, 1.0],\n [63.400395, 71.087625, 136.31178, 1.0],\n [62.936805, 72.225435, 136.664955, 1.0],\n [62.46786, 73.357125, 137.0013, 1.0],\n [61.993815, 74.48346, 137.32158, 1.0],\n [61.515435, 75.603675, 137.625795, 1.0],\n [61.03323, 76.718025, 137.91522, 1.0],\n [60.547455, 77.82651, 138.189855, 1.0],\n [60.05913, 78.929385, 138.45072, 1.0],\n [59.568765, 80.02614, 138.69807, 1.0],\n [59.07687, 81.11703, 138.93267, 1.0],\n [58.583445, 82.202055, 139.15503, 1.0],\n [58.08951, 83.28147, 139.36566, 1.0],\n [57.595065, 84.355275, 139.56507, 1.0],\n [57.100875, 85.42347, 139.753515, 1.0],\n [56.607195, 86.486055, 139.93176, 1.0],\n [56.114535, 87.543285, 140.100315, 1.0],\n [55.62315, 88.59516, 140.25969, 1.0],\n [55.13355, 89.641425, 140.409885, 1.0],\n [54.64599, 90.682845, 140.55192, 1.0],\n [54.160725, 91.719165, 140.68605, 1.0],\n [53.678265, 92.750385, 140.81253, 1.0],\n [53.198865, 93.77676, 140.932125, 1.0],\n [52.72278, 94.79829, 141.044835, 1.0],\n [52.250265, 95.81523, 141.150915, 1.0],\n [51.781065, 96.82758, 141.250875, 1.0],\n [51.315945, 97.83585, 141.34497, 1.0],\n [50.85465, 98.839785, 141.43371, 1.0],\n [50.39718, 99.83964, 141.517095, 1.0],\n [49.9443, 100.835415, 141.59538, 1.0],\n [49.4955, 101.827365, 141.669075, 1.0],\n [49.051035, 102.815745, 141.73818, 1.0],\n [48.610905, 103.800555, 141.802695, 1.0],\n [48.175365, 104.78205, 141.86313, 1.0],\n [47.743905, 105.76023, 141.919485, 1.0],\n [47.31678, 106.73535, 141.972015, 1.0],\n [46.89399, 107.707665, 142.02072, 1.0],\n [46.47528, 108.67692, 142.0656, 1.0],\n [46.060395, 109.643625, 142.10691, 1.0],\n [45.649845, 110.60778, 142.14465, 1.0],\n [45.242865, 111.569385, 142.179075, 1.0],\n [44.839455, 112.52895, 142.209675, 1.0],\n [44.43987, 113.48622, 142.23696, 1.0],\n [44.043345, 114.441705, 142.260675, 1.0],\n [43.64988, 115.39515, 142.281075, 1.0],\n [43.25973, 116.34681, 142.29765, 1.0],\n [42.87213, 117.29694, 142.31091, 1.0],\n [42.487335, 118.24554, 142.320345, 1.0],\n [42.104835, 119.192865, 142.325955, 1.0],\n [41.724375, 120.138915, 142.32774, 1.0],\n [41.34621, 121.08369, 142.3257, 1.0],\n [40.969575, 122.0277, 142.319325, 1.0],\n [40.59447, 122.970435, 142.308615, 1.0],\n [40.220895, 123.91266, 142.293315, 1.0],\n [39.84885, 124.85412, 142.27368, 1.0],\n [39.477825, 125.794815, 142.2492, 1.0],\n [39.10782, 126.735, 142.21962, 1.0],\n [38.73909, 127.674675, 142.184685, 1.0],\n [38.37138, 128.614095, 142.14465, 1.0],\n [38.004945, 129.553005, 142.09875, 1.0],\n [37.639785, 130.491915, 142.047495, 1.0],\n [37.2759, 131.430315, 141.989865, 1.0],\n [36.913545, 132.368715, 141.92586, 1.0],\n [36.552465, 133.307115, 141.855225, 1.0],\n [36.193425, 134.245515, 141.777705, 1.0],\n [35.83668, 135.18366, 141.693045, 1.0],\n [35.482485, 136.12206, 141.60099, 1.0],\n [35.13135, 137.06046, 141.50103, 1.0],\n [34.78404, 137.999115, 141.393165, 1.0],\n [34.44183, 138.937515, 141.277395, 1.0],\n [34.104465, 139.876425, 141.152955, 1.0],\n [33.77322, 140.81508, 141.01959, 1.0],\n [33.44886, 141.754245, 140.877045, 1.0],\n [33.132915, 142.69341, 140.72532, 1.0],\n [32.825895, 143.632575, 140.563395, 1.0],\n [32.52984, 144.571995, 140.39178, 1.0],\n [32.245515, 145.511415, 140.209455, 1.0],\n [31.97547, 146.45109, 140.01693, 1.0],\n [31.720725, 147.39051, 139.813185, 1.0],\n [31.483065, 148.330185, 139.598475, 1.0],\n [31.26453, 149.269605, 139.372035, 1.0],\n [31.066905, 150.209025, 139.133865, 1.0],\n [30.89274, 151.148445, 138.883455, 1.0],\n [30.744075, 152.08761, 138.620805, 1.0],\n [30.62346, 153.02652, 138.34515, 1.0],\n [30.53319, 153.965175, 138.057, 1.0],\n [30.47556, 154.90332, 137.75559, 1.0],\n [30.452865, 155.840955, 137.44041, 1.0],\n [30.468165, 156.778335, 137.11146, 1.0],\n [30.523245, 157.71495, 136.768485, 1.0],\n [30.620655, 158.651055, 136.41123, 1.0],\n [30.76269, 159.58614, 136.03944, 1.0],\n [30.9519, 160.52046, 135.653115, 1.0],\n [31.18956, 161.454015, 135.25149, 1.0],\n [31.47822, 162.386295, 134.834565, 1.0],\n [31.8189, 163.317555, 134.40234, 1.0],\n [32.21313, 164.247285, 133.954305, 1.0],\n [32.662185, 165.175995, 133.490205, 1.0],\n [33.167085, 166.10292, 133.01004, 1.0],\n [33.72834, 167.02857, 132.513555, 1.0],\n [34.34646, 167.95218, 132.000495, 1.0],\n [35.021445, 168.87426, 131.470605, 1.0],\n [35.75355, 169.794045, 130.923885, 1.0],\n [36.542265, 170.712045, 130.359825, 1.0],\n [37.38708, 171.62775, 129.77868, 1.0],\n [38.28774, 172.540905, 129.180195, 1.0],\n [39.24297, 173.451765, 128.56386, 1.0],\n [40.252005, 174.360075, 127.92993, 1.0],\n [41.31408, 175.26558, 127.277895, 1.0],\n [42.427665, 176.16828, 126.60801, 1.0],\n [43.59174, 177.06792, 125.919765, 1.0],\n [44.805285, 177.9645, 125.213415, 1.0],\n [46.066515, 178.85751, 124.488195, 1.0],\n [47.374665, 179.747205, 123.744615, 1.0],\n [48.72795, 180.63333, 122.98242, 1.0],\n [50.125605, 181.515885, 122.201355, 1.0],\n [51.565845, 182.39436, 121.40142, 1.0],\n [53.04765, 183.268755, 120.582615, 1.0],\n [54.57, 184.13907, 119.74494, 1.0],\n [56.13162, 185.004795, 118.88763, 1.0],\n [57.731235, 185.86644, 118.011195, 1.0],\n [59.367825, 186.722985, 117.115635, 1.0],\n [61.04037, 187.57494, 116.20044, 1.0],\n [62.74785, 188.42205, 115.26612, 1.0],\n [64.489245, 189.263805, 114.31242, 1.0],\n [66.263535, 190.10046, 113.339085, 1.0],\n [68.069955, 190.931505, 112.346115, 1.0],\n [69.907995, 191.75694, 111.333255, 1.0],\n [71.776635, 192.576765, 110.30076, 1.0],\n [73.674855, 193.39047, 109.24863, 1.0],\n [75.602145, 194.198055, 108.176865, 1.0],\n [77.55774, 194.99952, 107.085465, 1.0],\n [79.540875, 195.79461, 105.97443, 1.0],\n [81.551295, 196.58307, 104.84376, 1.0],\n [83.58798, 197.3649, 103.6932, 1.0],\n [85.650675, 198.13959, 102.522495, 1.0],\n [87.73887, 198.907395, 101.332155, 1.0],\n [89.8518, 199.667805, 100.12218, 1.0],\n [91.988955, 200.42082, 98.89257, 1.0],\n [94.14957, 201.16644, 97.64307, 1.0],\n [96.333645, 201.904155, 96.374445, 1.0],\n [98.540415, 202.63422, 95.08593, 1.0],\n [100.76937, 203.356125, 93.778035, 1.0],\n [103.020255, 204.070125, 92.45076, 1.0],\n [105.292815, 204.775455, 91.103595, 1.0],\n [107.58654, 205.47237, 89.73705, 1.0],\n [109.900665, 206.160615, 88.35138, 1.0],\n [112.234935, 206.84019, 86.946585, 1.0],\n [114.58884, 207.51084, 85.52292, 1.0],\n [116.96187, 208.172565, 84.080385, 1.0],\n [119.353515, 208.824855, 82.61949, 1.0],\n [121.76352, 209.46822, 81.139725, 1.0],\n [124.19163, 210.101895, 79.641855, 1.0],\n [126.636825, 210.72588, 78.126135, 1.0],\n [129.099105, 211.34043, 76.59231, 1.0],\n [131.57796, 211.94529, 75.041145, 1.0],\n [134.07288, 212.540205, 73.472385, 1.0],\n [136.583355, 213.125175, 71.88654, 1.0],\n [139.10862, 213.699945, 70.28463, 1.0],\n [141.64842, 214.26477, 68.666655, 1.0],\n [144.20199, 214.81965, 67.033635, 1.0],\n [146.768565, 215.36433, 65.385825, 1.0],\n [149.34789, 215.898555, 63.723735, 1.0],\n [151.938945, 216.422835, 62.048895, 1.0],\n [154.541475, 216.936915, 60.36156, 1.0],\n [157.154715, 217.440795, 58.66326, 1.0],\n [159.777645, 217.934475, 56.955015, 1.0],\n [162.41001, 218.41821, 55.2381, 1.0],\n [165.050535, 218.892, 53.514555, 1.0],\n [167.69871, 219.355845, 51.78591, 1.0],\n [170.35377, 219.809745, 50.054715, 1.0],\n [173.014695, 220.25421, 48.323265, 1.0],\n [175.68072, 220.68924, 46.594875, 1.0],\n [178.350825, 221.114835, 44.872605, 1.0],\n [181.02399, 221.531505, 43.160535, 1.0],\n [183.699705, 221.93925, 41.463765, 1.0],\n [186.376695, 222.33858, 39.787395, 1.0],\n [189.05394, 222.729495, 38.138055, 1.0],\n [191.73042, 223.112505, 36.52314, 1.0],\n [194.405115, 223.48812, 34.95132, 1.0],\n [197.07726, 223.85634, 33.432795, 1.0],\n [199.745325, 224.217675, 31.978275, 1.0],\n [202.4088, 224.57289, 30.601275, 1.0],\n [205.06641, 224.92173, 29.316075, 1.0],\n [207.71688, 225.265215, 28.138485, 1.0],\n [210.3597, 225.6036, 27.085335, 1.0],\n [212.99385, 225.937395, 26.17473, 1.0],\n [215.618055, 226.26711, 25.42401, 1.0],\n [218.23155, 226.593255, 24.85026, 1.0],\n [220.833315, 226.91634, 24.468015, 1.0],\n [223.42284, 227.236875, 24.28875, 1.0],\n [225.999105, 227.55537, 24.32037, 1.0],\n [228.5616, 227.87208, 24.565425, 1.0],\n [231.109305, 228.188025, 25.021875, 1.0],\n [233.64171, 228.503205, 25.682835, 1.0],\n [236.15703, 228.81915, 26.538105, 1.0],\n [238.65552, 229.13535, 27.573405, 1.0],\n [241.13718, 229.452825, 28.77369, 1.0],\n [243.6015, 229.771575, 30.12264, 1.0],\n [246.04797, 230.092365, 31.604955, 1.0],\n [248.476335, 230.41545, 33.204825, 1.0],\n [250.88634, 230.741085, 34.908735, 1.0],\n [253.27824, 231.070035, 36.70368, 1.0],\n ],\n inferno: [\n [0.37281, 0.11883, 3.53583, 1.0],\n [0.578085, 0.32385, 4.73535, 1.0],\n [0.841245, 0.573495, 6.180945, 1.0],\n [1.159485, 0.86496, 7.881795, 1.0],\n [1.53153, 1.19646, 9.83229, 1.0],\n [1.95738, 1.56468, 11.94318, 1.0],\n [2.438055, 1.966815, 14.061465, 1.0],\n [2.974065, 2.401335, 16.1823, 1.0],\n [3.568725, 2.862375, 18.32481, 1.0],\n [4.223055, 3.34968, 20.47191, 1.0],\n [4.940115, 3.858915, 22.635585, 1.0],\n [5.723985, 4.385745, 24.818385, 1.0],\n [6.577215, 4.929405, 27.01215, 1.0],\n [7.50516, 5.483265, 29.228355, 1.0],\n [8.513175, 6.04401, 31.466235, 1.0],\n [9.60534, 6.609855, 33.71916, 1.0],\n [10.774515, 7.175445, 35.990955, 1.0],\n [11.963325, 7.73262, 38.29182, 1.0],\n [13.16922, 8.28087, 40.60977, 1.0],\n [14.394495, 8.815095, 42.94557, 1.0],\n [15.6417, 9.33045, 45.29871, 1.0],\n [16.914405, 9.81852, 47.67531, 1.0],\n [18.214395, 10.27497, 50.07027, 1.0],\n [19.542435, 10.685775, 52.478745, 1.0],\n [20.90031, 11.04864, 54.898695, 1.0],\n [22.289805, 11.36178, 57.327315, 1.0],\n [23.71245, 11.623665, 59.76129, 1.0],\n [25.16901, 11.83251, 62.19552, 1.0],\n [26.660505, 11.98704, 64.62465, 1.0],\n [28.18668, 12.086745, 67.04256, 1.0],\n [29.74728, 12.13137, 69.441855, 1.0],\n [31.34154, 12.12168, 71.81412, 1.0],\n [32.967675, 12.059715, 74.15094, 1.0],\n [34.62339, 11.94828, 76.44288, 1.0],\n [36.30639, 11.79171, 78.681015, 1.0],\n [38.013615, 11.59434, 80.856675, 1.0],\n [39.74175, 11.362545, 82.96119, 1.0],\n [41.485695, 11.10627, 84.985635, 1.0],\n [43.241625, 10.834695, 86.92287, 1.0],\n [45.005715, 10.55751, 88.768305, 1.0],\n [46.774395, 10.283895, 90.517605, 1.0],\n [48.543585, 10.023795, 92.168985, 1.0],\n [50.310735, 9.792, 93.721425, 1.0],\n [52.073295, 9.59616, 95.17569, 1.0],\n [53.829225, 9.44265, 96.533565, 1.0],\n [55.576995, 9.336825, 97.79811, 1.0],\n [57.314565, 9.283275, 98.972895, 1.0],\n [59.04219, 9.283275, 100.062, 1.0],\n [60.759615, 9.338355, 101.070015, 1.0],\n [62.466585, 9.449025, 102.001785, 1.0],\n [64.1631, 9.614775, 102.86139, 1.0],\n [65.84967, 9.835605, 103.653675, 1.0],\n [67.52655, 10.109985, 104.382975, 1.0],\n [69.193485, 10.43511, 105.05388, 1.0],\n [70.85175, 10.800015, 105.66996, 1.0],\n [72.501855, 11.202915, 106.23504, 1.0],\n [74.144565, 11.63922, 106.752435, 1.0],\n [75.78039, 12.10485, 107.225205, 1.0],\n [77.40984, 12.59598, 107.65641, 1.0],\n [79.033425, 13.108785, 108.048855, 1.0],\n [80.65191, 13.63995, 108.40458, 1.0],\n [82.26555, 14.18667, 108.726135, 1.0],\n [83.874855, 14.745885, 109.015305, 1.0],\n [85.480335, 15.3153, 109.27362, 1.0],\n [87.0825, 15.892875, 109.503375, 1.0],\n [88.681605, 16.47708, 109.705335, 1.0],\n [90.27816, 17.065875, 109.88103, 1.0],\n [91.87242, 17.657985, 110.031735, 1.0],\n [93.464895, 18.252645, 110.15847, 1.0],\n [95.05584, 18.848325, 110.262, 1.0],\n [96.645255, 19.444515, 110.343345, 1.0],\n [98.23314, 20.040705, 110.403525, 1.0],\n [99.820515, 20.636385, 110.442795, 1.0],\n [101.40687, 21.230535, 110.461665, 1.0],\n [102.99297, 21.8229, 110.460645, 1.0],\n [104.578815, 22.41348, 110.43999, 1.0],\n [106.164405, 23.001765, 110.400465, 1.0],\n [107.749995, 23.587755, 110.34207, 1.0],\n [109.33584, 24.17145, 110.26506, 1.0],\n [110.921685, 24.752595, 110.169945, 1.0],\n [112.507785, 25.33119, 110.05647, 1.0],\n [114.09414, 25.907235, 109.9254, 1.0],\n [115.681005, 26.48124, 109.77699, 1.0],\n [117.268125, 27.052695, 109.61073, 1.0],\n [118.8555, 27.62211, 109.426875, 1.0],\n [120.44364, 28.189485, 109.22517, 1.0],\n [122.03229, 28.75482, 109.006125, 1.0],\n [123.621195, 29.31837, 108.76974, 1.0],\n [125.21061, 29.880645, 108.51576, 1.0],\n [126.800535, 30.441645, 108.24444, 1.0],\n [128.390715, 31.001625, 107.95578, 1.0],\n [129.98115, 31.561095, 107.64978, 1.0],\n [131.571585, 32.1198, 107.326185, 1.0],\n [133.16253, 32.67825, 106.984995, 1.0],\n [134.75322, 33.236955, 106.62621, 1.0],\n [136.344165, 33.79617, 106.250085, 1.0],\n [137.9346, 34.355895, 105.856365, 1.0],\n [139.525035, 34.916895, 105.445305, 1.0],\n [141.11496, 35.47917, 105.016395, 1.0],\n [142.70412, 36.04323, 104.56989, 1.0],\n [144.29277, 36.609585, 104.10579, 1.0],\n [145.880655, 37.178235, 103.624095, 1.0],\n [147.46752, 37.749945, 103.124805, 1.0],\n [149.052855, 38.32497, 102.608175, 1.0],\n [150.63717, 38.903565, 102.07395, 1.0],\n [152.2197, 39.48624, 101.521875, 1.0],\n [153.800445, 40.073505, 100.952205, 1.0],\n [155.37915, 40.66587, 100.365195, 1.0],\n [156.955815, 41.263335, 99.760845, 1.0],\n [158.529675, 41.86692, 99.139155, 1.0],\n [160.100985, 42.476625, 98.50038, 1.0],\n [161.66949, 43.09296, 97.84452, 1.0],\n [163.234425, 43.71669, 97.171575, 1.0],\n [164.7963, 44.34807, 96.481545, 1.0],\n [166.354095, 44.987355, 95.77443, 1.0],\n [167.908065, 45.63531, 95.05074, 1.0],\n [169.4577, 46.292445, 94.31073, 1.0],\n [171.002745, 46.959015, 93.554145, 1.0],\n [172.54269, 47.635785, 92.781495, 1.0],\n [174.07728, 48.322755, 91.993035, 1.0],\n [175.606515, 49.020945, 91.188765, 1.0],\n [177.129885, 49.730355, 90.36894, 1.0],\n [178.64688, 50.452005, 89.533815, 1.0],\n [180.1575, 51.18564, 88.683135, 1.0],\n [181.66098, 51.93228, 87.817665, 1.0],\n [183.15732, 52.69218, 86.937405, 1.0],\n [184.646265, 53.46585, 86.04312, 1.0],\n [186.126795, 54.253545, 85.134555, 1.0],\n [187.599165, 55.05603, 84.212475, 1.0],\n [189.062865, 55.87356, 83.27688, 1.0],\n [190.517385, 56.70639, 82.32828, 1.0],\n [191.96247, 57.55503, 81.366675, 1.0],\n [193.39761, 58.419735, 80.39283, 1.0],\n [194.82255, 59.30127, 79.406745, 1.0],\n [196.23678, 60.199635, 78.408675, 1.0],\n [197.640045, 61.115085, 77.39913, 1.0],\n [199.031835, 62.048385, 76.378365, 1.0],\n [200.411895, 62.99928, 75.346635, 1.0],\n [201.779715, 63.96828, 74.30445, 1.0],\n [203.134785, 64.95564, 73.25232, 1.0],\n [204.477105, 65.96187, 72.190245, 1.0],\n [205.80591, 66.98646, 71.11899, 1.0],\n [207.120945, 68.03043, 70.038555, 1.0],\n [208.421955, 69.09327, 68.94945, 1.0],\n [209.70843, 70.175235, 67.851675, 1.0],\n [210.97986, 71.276835, 66.74625, 1.0],\n [212.236245, 72.397815, 65.632665, 1.0],\n [213.477075, 73.538175, 64.51194, 1.0],\n [214.702095, 74.697915, 63.38382, 1.0],\n [215.910795, 75.877545, 62.248815, 1.0],\n [217.10292, 77.0763, 61.10718, 1.0],\n [218.27796, 78.29469, 59.958915, 1.0],\n [219.435915, 79.53246, 58.80453, 1.0],\n [220.57653, 80.78961, 57.644025, 1.0],\n [221.699295, 82.065885, 56.47791, 1.0],\n [222.803955, 83.36103, 55.30593, 1.0],\n [223.890255, 84.6753, 54.12834, 1.0],\n [224.95794, 86.008185, 52.94514, 1.0],\n [226.00701, 87.35943, 51.75684, 1.0],\n [227.036955, 88.729035, 50.56293, 1.0],\n [228.047775, 90.116745, 49.36392, 1.0],\n [229.03896, 91.522305, 48.1593, 1.0],\n [230.010765, 92.94546, 46.94958, 1.0],\n [230.962425, 94.3857, 45.73425, 1.0],\n [231.89445, 95.84328, 44.513565, 1.0],\n [232.80633, 97.31718, 43.287525, 1.0],\n [233.69781, 98.807655, 42.05562, 1.0],\n [234.569145, 100.314195, 40.81785, 1.0],\n [235.419825, 101.836545, 39.574215, 1.0],\n [236.24985, 103.374195, 38.32446, 1.0],\n [237.05922, 104.927145, 37.068585, 1.0],\n [237.847935, 106.494885, 35.806335, 1.0],\n [238.615485, 108.076905, 34.5372, 1.0],\n [239.362125, 109.673205, 33.26169, 1.0],\n [240.087855, 111.283275, 31.979295, 1.0],\n [240.792675, 112.90686, 30.69027, 1.0],\n [241.476075, 114.543705, 29.39436, 1.0],\n [242.13831, 116.1933, 28.09182, 1.0],\n [242.779125, 117.85539, 26.782905, 1.0],\n [243.39903, 119.52972, 25.46787, 1.0],\n [243.99726, 121.21578, 24.147225, 1.0],\n [244.57407, 122.91357, 22.822245, 1.0],\n [245.129715, 124.62258, 21.493695, 1.0],\n [245.663685, 126.34281, 20.163615, 1.0],\n [246.176235, 128.073495, 18.834045, 1.0],\n [246.66711, 129.81489, 17.508045, 1.0],\n [247.136565, 131.56623, 16.18944, 1.0],\n [247.584345, 133.327515, 14.883585, 1.0],\n [248.01045, 135.09849, 13.59762, 1.0],\n [248.41488, 136.8789, 12.33996, 1.0],\n [248.797635, 138.66849, 11.12259, 1.0],\n [249.15846, 140.46675, 9.95775, 1.0],\n [249.49761, 142.273935, 8.907405, 1.0],\n [249.81483, 144.089535, 8.009295, 1.0],\n [250.11012, 145.913295, 7.26954, 1.0],\n [250.383225, 147.74496, 6.69375, 1.0],\n [250.634655, 149.58453, 6.288555, 1.0],\n [250.863645, 151.431495, 6.06135, 1.0],\n [251.070705, 153.28611, 6.01953, 1.0],\n [251.255325, 155.14761, 6.17151, 1.0],\n [251.41776, 157.01625, 6.52596, 1.0],\n [251.55801, 158.891775, 7.09257, 1.0],\n [251.67582, 160.773675, 7.88154, 1.0],\n [251.770935, 162.66195, 8.90358, 1.0],\n [251.84361, 164.5566, 10.17093, 1.0],\n [251.893845, 166.457115, 11.623155, 1.0],\n [251.92113, 168.36375, 13.19625, 1.0],\n [251.925975, 170.27574, 14.873895, 1.0],\n [251.90787, 172.193085, 16.640535, 1.0],\n [251.86707, 174.115785, 18.484695, 1.0],\n [251.80332, 176.04333, 20.39745, 1.0],\n [251.71662, 177.97572, 22.371405, 1.0],\n [251.60697, 179.9127, 24.40197, 1.0],\n [251.474625, 181.854015, 26.485065, 1.0],\n [251.31933, 183.79941, 28.618395, 1.0],\n [251.140575, 185.748885, 30.800175, 1.0],\n [250.939125, 187.702185, 33.029385, 1.0],\n [250.71498, 189.65829, 35.305515, 1.0],\n [250.46814, 191.61771, 37.629075, 1.0],\n [250.199115, 193.579425, 40.000065, 1.0],\n [249.90816, 195.543435, 42.420015, 1.0],\n [249.59553, 197.508975, 44.889435, 1.0],\n [249.261735, 199.47579, 47.410365, 1.0],\n [248.90754, 201.44337, 49.98459, 1.0],\n [248.53269, 203.41146, 52.61466, 1.0],\n [248.13744, 205.379295, 55.303635, 1.0],\n [247.72434, 207.34611, 58.05279, 1.0],\n [247.294665, 209.310375, 60.86493, 1.0],\n [246.850455, 211.271325, 63.74286, 1.0],\n [246.391965, 213.228705, 66.69117, 1.0],\n [245.92047, 215.18124, 69.714705, 1.0],\n [245.441835, 217.12638, 72.81423, 1.0],\n [244.95963, 219.062595, 75.99255, 1.0],\n [244.4736, 220.98912, 79.2591, 1.0],\n [243.99267, 222.902895, 82.61337, 1.0],\n [243.524235, 224.800095, 86.056125, 1.0],\n [243.069825, 226.68021, 89.599095, 1.0],\n [242.64423, 228.53763, 93.234885, 1.0],\n [242.25459, 230.369295, 96.969105, 1.0],\n [241.914165, 232.170615, 100.798695, 1.0],\n [241.63647, 233.936745, 104.719575, 1.0],\n [241.436295, 235.66284, 108.725115, 1.0],\n [241.32996, 237.344055, 112.803585, 1.0],\n [241.332765, 238.975545, 116.94096, 1.0],\n [241.460265, 240.55374, 121.11735, 1.0],\n [241.723935, 242.07609, 125.31363, 1.0],\n [242.133975, 243.541065, 129.5043, 1.0],\n [242.6937, 244.949685, 133.671765, 1.0],\n [243.404895, 246.30348, 137.792055, 1.0],\n [244.26348, 247.605765, 141.850125, 1.0],\n [245.26206, 248.86062, 145.840875, 1.0],\n [246.393495, 250.07289, 149.73753, 1.0],\n [247.64631, 251.24691, 153.54927, 1.0],\n [249.010305, 252.387015, 157.2738, 1.0],\n [250.475535, 253.497795, 160.909335, 1.0],\n [252.03231, 254.58282, 164.45562, 1.0],\n ],\n} as { [themeName: string]: RGBAColor[] };\n","/* Rule:\n *\n * condition: function from datum to boolean\n * shapes - a list of Shapes\n * legend_label\n * exclude_from_legend\n *\n * Shape:\n * type\n * x\n * y\n * ... shape-specific attrs ...\n *\n * Attrs by shape:\n *\n * rectangle: x, y, width, height, stroke, stroke-width, fill\n * triangle: x1, y1, x2, y2, x3, y3, stroke, stroke-width, fill\n * ellipse: x, y, width, height, stroke, stroke-width, fill\n * line: x1, y1, x2, y2, stroke, stroke-width\n */\n\nimport {\n ComputedShapeParams,\n Ellipse,\n Line,\n Rectangle,\n Shape,\n ShapeParams,\n Triangle,\n} from './oncoprintshape';\nimport heatmapColors from './heatmapcolors';\nimport binarysearch from './binarysearch';\nimport {\n Omit,\n cloneShallow,\n ifndef,\n objectValues,\n shallowExtend,\n z_comparator,\n} from './utils';\nimport { ActiveRules, ColumnProp, Datum, RuleSetId } from './oncoprintmodel';\nimport _ from 'lodash';\nimport extractrgba, { hexToRGBA, rgbaToHex } from './extractrgba';\n\nexport type RuleSetParams =\n | ILinearInterpRuleSetParams\n | ICategoricalRuleSetParams\n | IGradientRuleSetParams\n | IBarRuleSetParams\n | IStackedBarRuleSetParams\n | IGradientAndCategoricalRuleSetParams\n | IGeneticAlterationRuleSetParams;\n\ninterface IGeneralRuleSetParams {\n type?: RuleSetType;\n legend_label?: string;\n legend_base_color?: RGBAColor;\n exclude_from_legend?: boolean;\n na_z?: number; // z index of na shapes (defaults to 1)\n na_legend_label?: string; // legend label associated to NA (defaults to 'No data')\n na_shapes?: ShapeParams[]; // defaults to single strikethrough line\n}\n\ninterface ILinearInterpRuleSetParams extends IGeneralRuleSetParams {\n log_scale?: boolean;\n value_key: string;\n value_range: [number, number];\n}\n\n// all colors are hex, rgb, or rgba\nexport interface ICategoricalRuleSetParams extends IGeneralRuleSetParams {\n type: RuleSetType.CATEGORICAL;\n category_key: string; // key into data which gives category\n category_to_color?: { [category: string]: RGBAColor };\n universal_rule_categories?: { [category: string]: any };\n}\n\nexport interface IGradientRuleSetParams extends ILinearInterpRuleSetParams {\n type: RuleSetType.GRADIENT;\n // either `colormap_name` or `colors` needs to be present\n colors?: RGBAColor[]; // [r,g,b,a][]\n colormap_name?: string; // name of a colormap found in src/js/heatmapcolors.js\n value_stop_points: number[];\n null_color?: RGBAColor;\n null_legend_label?: string;\n}\n\n// TODO: it would be more elegant to create multiple inheritance (if possible) since\n// IGradientAndCategoricalRuleSetParams is a IGradientRuleSetParams and\n// ICategoricalRuleSetParams with a different `type` field.\nexport interface IGradientAndCategoricalRuleSetParams\n extends IGeneralRuleSetParams {\n type: RuleSetType.GRADIENT_AND_CATEGORICAL;\n // either `colormap_name` or `colors` needs to be present\n colors?: RGBAColor[];\n colormap_name?: string; // name of a colormap found in src/js/heatmapcolors.js\n value_stop_points: number[];\n null_color?: RGBAColor;\n\n log_scale?: boolean;\n value_key: string;\n value_range: [number, number];\n\n category_key: string; // key into data which gives category\n category_to_color?: { [category: string]: RGBAColor };\n}\n\nexport interface IBarRuleSetParams extends ILinearInterpRuleSetParams {\n type: RuleSetType.BAR;\n fill?: RGBAColor;\n negative_fill?: RGBAColor;\n}\n\nexport interface IStackedBarRuleSetParams extends IGeneralRuleSetParams {\n type: RuleSetType.STACKED_BAR;\n value_key: string;\n categories: string[];\n fills?: RGBAColor[];\n}\n\nexport interface IGeneticAlterationRuleSetParams extends IGeneralRuleSetParams {\n type: RuleSetType.GENE;\n rule_params: GeneticAlterationRuleParams;\n}\n\ntype GeneticAlterationSingleRuleParams = {\n shapes: ShapeParams[];\n legend_label: string;\n exclude_from_legend?: boolean;\n legend_order?: number;\n};\n\nexport type GeneticAlterationRuleParams = {\n always?: GeneticAlterationSingleRuleParams;\n conditional: {\n [datumKey: string]: {\n [commaSeparatedDatumValues: string]: GeneticAlterationSingleRuleParams;\n };\n };\n};\n\nexport type RGBAColor = [number, number, number, number]; //[0,255] x [0,255] x [0,255] x [0,1]\n\ntype RuleParams = {\n shapes: ShapeParams[];\n legend_label?: string;\n exclude_from_legend?: boolean;\n legend_config?: RuleLegendConfig;\n legend_order?: number;\n legend_base_color?: RGBAColor;\n};\n\ntype RuleLegendConfig =\n | { type: 'rule'; target: any }\n | {\n type: 'number';\n range: [number, number];\n range_type: LinearInterpRangeType;\n positive_color: RGBAColor;\n negative_color: RGBAColor;\n interpFn: (val: number) => number;\n } // range: [lower, upper]\n | {\n type: 'gradient';\n range: [number, number];\n colorFn: (val: number) => RGBAColor;\n };\n\nexport enum RuleSetType {\n CATEGORICAL = 'categorical',\n GRADIENT = 'gradient',\n GRADIENT_AND_CATEGORICAL = 'gradient+categorical',\n BAR = 'bar',\n STACKED_BAR = 'stacked_bar',\n GENE = 'gene',\n}\n\nexport type RuleId = number;\n\nexport type RuleWithId = {\n id: RuleId;\n rule: Rule;\n};\n\nfunction makeIdCounter() {\n let id = 0;\n return function() {\n id += 1;\n return id;\n };\n}\n\nfunction intRange(length: number) {\n const ret = [];\n for (let i = 0; i < length; i++) {\n ret.push(i);\n }\n return ret;\n}\n\nfunction makeUniqueColorGetter(init_used_colors: string[]) {\n init_used_colors = init_used_colors || [];\n const colors = [\n '#3366cc',\n '#dc3912',\n '#ff9900',\n '#109618',\n '#990099',\n '#0099c6',\n '#dd4477',\n '#66aa00',\n '#b82e2e',\n '#316395',\n '#994499',\n '#22aa99',\n '#aaaa11',\n '#6633cc',\n '#e67300',\n '#8b0707',\n '#651067',\n '#329262',\n '#5574a6',\n '#3b3eac',\n '#b77322',\n '#16d620',\n '#b91383',\n '#f4359e',\n '#9c5935',\n '#a9c413',\n '#2a778d',\n '#668d1c',\n '#bea413',\n '#0c5922',\n '#743411',\n ]; // Source: D3\n let index = 0;\n const used_colors: { [color: string]: boolean } = {};\n for (let i = 0; i < init_used_colors.length; i++) {\n used_colors[init_used_colors[i]] = true;\n }\n return function(color?: string) {\n if (color) {\n // calling with an argument adds it to the used colors record\n used_colors[color] = true;\n } else {\n // calling without an argument returns a new unused color\n let next_color = colors[index % colors.length];\n while (used_colors[next_color]) {\n const darker_next_color = darkenHexColor(next_color);\n if (darker_next_color === next_color) {\n break;\n }\n next_color = darker_next_color;\n }\n used_colors[next_color] = true;\n index += 1;\n\n return hexToRGBA(next_color);\n }\n\n return undefined;\n };\n}\n\nfunction makeNAShapes(z: number): ShapeParams[] {\n return [\n {\n type: 'rectangle',\n fill: [255, 255, 255, 1],\n z: z,\n },\n {\n type: 'line',\n stroke: [190, 190, 190, 1],\n 'stroke-width': 1,\n x1: 0,\n x2: 100,\n y1: 50,\n y2: 50,\n z: z,\n },\n ];\n}\nconst NA_STRING = 'na';\nconst NA_LABEL = 'No data';\n\nfunction colorToHex(color: string) {\n let r;\n let g;\n let b;\n const rgba_match = color.match(\n /^[\\s]*rgba\\([\\s]*([0-9]+)[\\s]*,[\\s]*([0-9]+)[\\s]*,[\\s]*([0-9]+)[\\s]*,[\\s]*([0-9.]+)[\\s]*\\)[\\s]*$/\n );\n if (rgba_match && rgba_match.length === 5) {\n r = parseInt(rgba_match[1]).toString(16);\n g = parseInt(rgba_match[2]).toString(16);\n b = parseInt(rgba_match[3]).toString(16);\n if (r.length === 1) {\n r = '0' + r;\n }\n if (g.length === 1) {\n g = '0' + g;\n }\n if (b.length === 1) {\n b = '0' + b;\n }\n return '#' + r + g + b;\n }\n\n const rgb_match = color.match(\n /^[\\s]*rgb\\([\\s]*([0-9]+)[\\s]*,[\\s]*([0-9]+)[\\s]*,[\\s]*([0-9]+)[\\s]*\\)[\\s]*$/\n );\n if (rgb_match && rgb_match.length === 4) {\n r = parseInt(rgb_match[1]).toString(16);\n g = parseInt(rgb_match[2]).toString(16);\n b = parseInt(rgb_match[3]).toString(16);\n if (r.length === 1) {\n r = '0' + r;\n }\n if (g.length === 1) {\n g = '0' + g;\n }\n if (b.length === 1) {\n b = '0' + b;\n }\n return '#' + r + g + b;\n }\n\n return color;\n}\n\nfunction darkenHexChannel(c: string) {\n let numC = parseInt(c, 16);\n numC *= 0.95;\n numC = Math.round(numC);\n c = numC.toString(16);\n if (c.length === 1) {\n c = '0' + c;\n }\n return c;\n}\n\nfunction darkenHexColor(color: string) {\n let r = color[1] + color[2];\n let g = color[3] + color[4];\n let b = color[5] + color[6];\n r = darkenHexChannel(r);\n g = darkenHexChannel(g);\n b = darkenHexChannel(b);\n return '#' + r + g + b;\n}\n\nexport class RuleSet {\n static getRuleSetId = makeIdCounter();\n static getRuleId = makeIdCounter();\n\n public rule_set_id: RuleSetId;\n public legend_label?: string;\n protected legend_base_color?: RGBAColor;\n public exclude_from_legend?: boolean;\n protected active_rule_ids: ActiveRules;\n protected rules_with_id: RuleWithId[];\n protected universal_rule?: RuleWithId;\n\n constructor(params: Omit<RuleSetParams, 'type'>) {\n /* params:\n * - legend_label\n * - exclude_from_legend\n */\n this.rule_set_id = RuleSet.getRuleSetId();\n this.legend_label = params.legend_label;\n this.legend_base_color = params.legend_base_color;\n this.exclude_from_legend = params.exclude_from_legend;\n this.active_rule_ids = {};\n this.rules_with_id = [];\n }\n\n public getLegendLabel() {\n return this.legend_label;\n }\n\n public getRuleSetId() {\n return this.rule_set_id;\n }\n\n public addRules(list_of_params: RuleParams[]) {\n const self = this;\n return list_of_params.map(function(params) {\n return self._addRule(params);\n });\n }\n\n public _addRule(params: RuleParams, rule_id?: RuleId) {\n if (typeof rule_id === 'undefined') {\n rule_id = RuleSet.getRuleId();\n }\n this.rules_with_id.push({ id: rule_id, rule: new Rule(params) });\n return rule_id;\n }\n\n public setUniversalRule(r: RuleWithId) {\n this.universal_rule = r;\n }\n\n public removeRule(rule_id: RuleId) {\n var index = -1;\n for (let i = 0; i < this.rules_with_id.length; i++) {\n if (this.rules_with_id[i].id === rule_id) {\n index = i;\n break;\n }\n }\n if (index > -1) {\n this.rules_with_id.splice(index, 1);\n }\n delete this.active_rule_ids[rule_id];\n }\n\n public getRuleWithId(rule_id: RuleId) {\n let ret = null;\n for (let i = 0; i < this.rules_with_id.length; i++) {\n if (this.rules_with_id[i].id === rule_id) {\n ret = this.rules_with_id[i];\n break;\n }\n }\n return ret;\n }\n\n public isExcludedFromLegend() {\n return this.exclude_from_legend;\n }\n\n public getRule(rule_id: RuleId): Rule {\n return this.getRuleWithId(rule_id).rule;\n }\n\n public getRecentlyUsedRules() {\n const self = this;\n return Object.keys(this.active_rule_ids).map(function(rule_id) {\n return self.getRule(parseInt(rule_id, 10));\n });\n }\n\n public applyRulesToDatum(\n rules_with_id: RuleWithId[],\n datum: Datum,\n cell_width: number,\n cell_height: number\n ) {\n let shapes: ComputedShapeParams[] = [];\n const rules_len = rules_with_id.length;\n for (let j = 0; j < rules_len; j++) {\n shapes = shapes.concat(\n rules_with_id[j].rule.apply(datum, cell_width, cell_height)\n );\n }\n return shapes;\n }\n\n public getSpecificRulesForDatum(datum?: Datum): RuleWithId[] {\n throw 'Not implemented on base class';\n }\n\n public getUniversalRule() {\n return this.universal_rule;\n }\n\n public getUniversalShapes(cell_width: number, cell_height: number) {\n if (this.getUniversalRule()) {\n const shapes = this.getUniversalRule().rule.apply(\n {}, // a universal rule does not rely on anything specific to the data\n cell_width,\n cell_height\n );\n shapes.sort(z_comparator);\n return shapes;\n } else {\n return [];\n }\n }\n\n public getSpecificShapesForDatum(\n data: Datum[],\n cell_width: number,\n cell_height: number,\n out_active_rules?: ActiveRules | undefined,\n data_id_key?: string & keyof Datum,\n important_ids?: ColumnProp<boolean>\n ) {\n // Returns a list of lists of concrete shapes, in the same order as data\n // optional parameter important_ids determines which ids count towards active rules (optional parameter data_id_key\n //\t\tis used for this too)\n const ret = [];\n for (var i = 0; i < data.length; i++) {\n const datum = data[i];\n const should_mark_active =\n !important_ids || !!important_ids[datum[data_id_key!]];\n const rules = this.getSpecificRulesForDatum(datum);\n if (typeof out_active_rules !== 'undefined' && should_mark_active) {\n for (let j = 0; j < rules.length; j++) {\n out_active_rules[rules[j].id] = true;\n }\n }\n const shapes = this.applyRulesToDatum(\n rules,\n data[i],\n cell_width,\n cell_height\n );\n shapes.sort(z_comparator);\n ret.push(shapes);\n }\n // mark universal rule as active\n if (\n this.getUniversalRule() &&\n typeof out_active_rules !== 'undefined'\n ) {\n out_active_rules[this.getUniversalRule().id] = true;\n }\n return ret;\n }\n}\n\nclass LookupRuleSet extends RuleSet {\n private lookup_map_by_key_and_value: {\n [key: string]: { [value: string]: RuleWithId };\n } = {};\n private lookup_map_by_key: { [key: string]: RuleWithId } = {};\n private rule_id_to_conditions: {\n [ruleId: number]: { key: string; value: string }[];\n } = {};\n\n public getSpecificRulesForDatum(datum?: Datum) {\n if (typeof datum === 'undefined') {\n return this.rules_with_id;\n }\n let ret: RuleWithId[] = [];\n for (var key in datum) {\n if (key in datum && typeof datum[key] !== 'undefined') {\n var key_rule = this.lookup_map_by_key[key];\n if (typeof key_rule !== 'undefined') {\n ret.push(key_rule);\n }\n var key_and_value_rule =\n (this.lookup_map_by_key_and_value[key] &&\n this.lookup_map_by_key_and_value[key][datum[key]]) ||\n undefined;\n if (typeof key_and_value_rule !== 'undefined') {\n ret.push(key_and_value_rule);\n }\n }\n }\n return ret;\n }\n\n private indexRuleForLookup(\n condition_key: string,\n condition_value: string,\n rule_with_id: RuleWithId\n ) {\n if (condition_key === null) {\n this.setUniversalRule(rule_with_id);\n } else {\n if (condition_value === null) {\n this.lookup_map_by_key[condition_key] = rule_with_id;\n } else {\n this.lookup_map_by_key_and_value[condition_key] =\n this.lookup_map_by_key_and_value[condition_key] || {};\n this.lookup_map_by_key_and_value[condition_key][\n condition_value\n ] = rule_with_id;\n }\n }\n this.rule_id_to_conditions[rule_with_id.id] =\n this.rule_id_to_conditions[rule_with_id.id] || [];\n this.rule_id_to_conditions[rule_with_id.id].push({\n key: condition_key,\n value: condition_value,\n });\n }\n\n public addRule(\n condition_key: string,\n condition_value: any,\n params: RuleParams\n ) {\n const rule_id = this._addRule(params);\n\n this.indexRuleForLookup(\n condition_key,\n condition_value,\n this.getRuleWithId(rule_id)\n );\n\n return rule_id;\n }\n\n public linkExistingRule(\n condition_key: string,\n condition_value: string,\n existing_rule_id: RuleId\n ) {\n this.indexRuleForLookup(\n condition_key,\n condition_value,\n this.getRuleWithId(existing_rule_id)\n );\n }\n\n public removeRule(rule_id: RuleId) {\n super.removeRule(rule_id);\n\n while (this.rule_id_to_conditions[rule_id].length > 0) {\n var condition = this.rule_id_to_conditions[rule_id].pop();\n if (condition.key === null) {\n // universal rule\n this.universal_rule = undefined;\n } else {\n if (condition.value === null) {\n delete this.lookup_map_by_key[condition.key];\n } else {\n delete this.lookup_map_by_key_and_value[condition.key][\n condition.value\n ];\n }\n }\n }\n delete this.rule_id_to_conditions[rule_id];\n }\n}\n\ntype ConditionRuleSetCondition = (d: Datum) => boolean;\nclass ConditionRuleSet extends RuleSet {\n private rule_id_to_condition: {\n [ruleId: number]: ConditionRuleSetCondition;\n } = {};\n\n constructor(params: RuleSetParams, omitNArule?: boolean) {\n super(params);\n\n if (!omitNArule) {\n this.addRule(\n function(d) {\n return d[NA_STRING] === true;\n },\n {\n shapes:\n params.na_shapes || makeNAShapes(params.na_z || 1000),\n legend_label: params.na_legend_label || NA_LABEL,\n exclude_from_legend: false,\n legend_config: { type: 'rule', target: { na: true } },\n legend_order: Number.POSITIVE_INFINITY,\n }\n );\n }\n }\n\n public getSpecificRulesForDatum(datum?: Datum) {\n if (typeof datum === 'undefined') {\n return this.rules_with_id;\n }\n const ret = [];\n for (let i = 0; i < this.rules_with_id.length; i++) {\n if (this.rule_id_to_condition[this.rules_with_id[i].id](datum)) {\n ret.push(this.rules_with_id[i]);\n }\n }\n return ret;\n }\n\n public addRule(\n condition: ConditionRuleSetCondition,\n params: RuleParams,\n rule_id?: RuleId\n ) {\n rule_id = this._addRule(params, rule_id);\n this.rule_id_to_condition[rule_id] = condition;\n return rule_id;\n }\n\n public removeRule(rule_id: RuleId) {\n super.removeRule(rule_id);\n delete this.rule_id_to_condition[rule_id];\n }\n}\n\nclass CategoricalRuleSet extends LookupRuleSet {\n public readonly category_key: string;\n private readonly category_to_color: { [category: string]: RGBAColor };\n private readonly getUnusedColor: (color?: string) => RGBAColor;\n private readonly universal_rule_categories?: { [category: string]: any };\n constructor(\n params: Omit<ICategoricalRuleSetParams, 'type'>,\n omitNArule?: boolean\n ) {\n super(params);\n if (!omitNArule) {\n this.addRule(NA_STRING, true, {\n shapes: params.na_shapes || makeNAShapes(params.na_z || 1000),\n legend_label: params.na_legend_label || NA_LABEL,\n exclude_from_legend: false,\n legend_config: { type: 'rule', target: { na: true } },\n legend_order: Number.POSITIVE_INFINITY,\n });\n }\n\n this.category_key = params.category_key;\n this.universal_rule_categories = params.universal_rule_categories;\n this.category_to_color = cloneShallow(\n ifndef(params.category_to_color, {})\n );\n this.getUnusedColor = makeUniqueColorGetter(\n objectValues(this.category_to_color).map(rgbaToHex)\n );\n for (const category of Object.keys(this.category_to_color)) {\n const color = this.category_to_color[category];\n this.addCategoryRule(category, color);\n this.getUnusedColor(rgbaToHex(color));\n }\n }\n\n private addCategoryRule(category: string, color: RGBAColor) {\n const legend_rule_target: any = {};\n legend_rule_target[this.category_key] = category;\n const rule_params: RuleParams = {\n shapes: [\n {\n type: 'rectangle',\n fill: color,\n },\n ],\n legend_label: category,\n exclude_from_legend: false,\n legend_config: { type: 'rule', target: legend_rule_target },\n };\n if (\n this.universal_rule_categories &&\n this.universal_rule_categories.hasOwnProperty(category)\n ) {\n // add universal rule\n this.addRule(null, category, rule_params);\n } else {\n this.addRule(this.category_key, category, rule_params);\n }\n }\n\n public getSpecificShapesForDatum(\n data: Datum,\n cell_width: number,\n cell_height: number,\n out_active_rules: ActiveRules | undefined,\n data_id_key: string & keyof Datum,\n important_ids?: ColumnProp<boolean>\n ) {\n // First ensure there is a color for all categories\n for (let i = 0, data_len = data.length; i < data_len; i++) {\n if (data[i][NA_STRING]) {\n continue;\n }\n const category = data[i][this.category_key];\n if (!(category in this.category_to_color)) {\n const color = this.getUnusedColor();\n\n this.category_to_color[category] = color;\n this.addCategoryRule(category, color);\n }\n }\n // Then propagate the call up\n return super.getSpecificShapesForDatum(\n data,\n cell_width,\n cell_height,\n out_active_rules,\n data_id_key,\n important_ids\n );\n }\n}\n\nexport enum LinearInterpRangeType {\n ALL = 'ALL', // all values positive, negative and zero\n NON_NEGATIVE = 'NON_NEGATIVE', // value range all positive values inclusive zero (0)\n NON_POSITIVE = 'NON_POSITIVE', // value range all negative values inclusive zero (0)\n}\n\nclass LinearInterpRuleSet extends ConditionRuleSet {\n protected value_key: string;\n protected value_range: [number, number];\n protected log_scale?: boolean;\n protected type: string;\n protected makeInterpFn: () => (valToConvert: number) => number;\n protected inferred_value_range: [number, number];\n\n constructor(params: ILinearInterpRuleSetParams) {\n super(params);\n this.value_key = params.value_key;\n this.value_range = params.value_range;\n this.log_scale = params.log_scale; // boolean\n this.type = params.type;\n\n this.makeInterpFn = function() {\n const range = this.getEffectiveValueRange();\n const rangeType = this.getValueRangeType();\n const plotType = this.type;\n if (this.log_scale) {\n var shift_to_make_pos = Math.abs(range[0]) + 1;\n var log_range =\n Math.log(range[1] + shift_to_make_pos) -\n Math.log(range[0] + shift_to_make_pos);\n var log_range_lower = Math.log(range[0] + shift_to_make_pos);\n return function(val: number) {\n return (\n (Math.log(val + shift_to_make_pos) - log_range_lower) /\n log_range\n );\n };\n } else {\n return function(val) {\n var range_spread = range[1] - range[0],\n range_lower = range[0],\n range_higher = range[1];\n if (plotType === 'bar') {\n if (rangeType === LinearInterpRangeType.NON_POSITIVE) {\n // when data only contains non positive values\n return (val - range_higher) / range_spread;\n } else if (\n rangeType === LinearInterpRangeType.NON_NEGATIVE\n ) {\n // when data only contains non negative values\n return (val - range_lower) / range_spread;\n } else if (rangeType === LinearInterpRangeType.ALL) {\n range_spread =\n Math.abs(range[0]) > range[1]\n ? Math.abs(range[0])\n : range[1];\n return val / range_spread;\n }\n } else {\n return (val - range_lower) / range_spread;\n }\n return undefined;\n };\n }\n };\n }\n\n protected getEffectiveValueRange(): [number, number] {\n const ret = (this.value_range && this.value_range.slice()) || [\n undefined,\n undefined,\n ];\n if (typeof ret[0] === 'undefined') {\n ret[0] = this.inferred_value_range[0];\n }\n if (typeof ret[1] === 'undefined') {\n ret[1] = this.inferred_value_range[1];\n }\n if (ret[0] === ret[1]) {\n // Make sure non-empty interval\n ret[0] -= ret[0] / 2;\n ret[1] += ret[1] / 2;\n }\n return ret as [number, number];\n }\n protected getValueRangeType() {\n var range = this.getEffectiveValueRange();\n if (range[0] < 0 && range[1] <= 0) {\n return LinearInterpRangeType.NON_POSITIVE;\n } else if (range[0] >= 0 && range[1] > 0) {\n return LinearInterpRangeType.NON_NEGATIVE;\n } else {\n return LinearInterpRangeType.ALL;\n }\n }\n\n public getSpecificShapesForDatum(\n data: Datum,\n cell_width: number,\n cell_height: number,\n out_active_rules: ActiveRules | undefined,\n data_id_key: string & keyof Datum,\n important_ids?: ColumnProp<boolean>\n ) {\n // First find value range\n let value_min = Number.POSITIVE_INFINITY;\n let value_max = Number.NEGATIVE_INFINITY;\n for (var i = 0, datalen = data.length; i < datalen; i++) {\n const d = data[i];\n if (isNaN(d[this.value_key])) {\n continue;\n }\n value_min = Math.min(value_min, d[this.value_key]);\n value_max = Math.max(value_max, d[this.value_key]);\n }\n if (value_min === Number.POSITIVE_INFINITY) {\n value_min = 0;\n }\n if (value_max === Number.NEGATIVE_INFINITY) {\n value_max = 0;\n }\n this.inferred_value_range = [value_min, value_max];\n this.updateLinearRules();\n\n // Then propagate the call up\n return super.getSpecificShapesForDatum(\n data,\n cell_width,\n cell_height,\n out_active_rules,\n data_id_key,\n important_ids\n );\n }\n\n protected updateLinearRules() {\n throw 'Not implemented in abstract class';\n }\n}\n\nclass GradientRuleSet extends LinearInterpRuleSet {\n private colors: RGBAColor[] = [];\n private value_stop_points: number[];\n private null_color?: RGBAColor;\n private gradient_rule: RuleId;\n\n constructor(params: Omit<IGradientRuleSetParams, 'type'>) {\n super(params);\n if (params.colors) {\n this.colors = params.colors || [];\n } else if (params.colormap_name) {\n this.colors = heatmapColors[params.colormap_name] || [];\n }\n if (this.colors.length === 0) {\n this.colors.push([0, 0, 0, 1], [255, 0, 0, 1]);\n }\n\n this.value_stop_points = params.value_stop_points;\n this.null_color = params.null_color || [211, 211, 211, 1];\n\n var self = this;\n var value_key = this.value_key;\n this.addRule(\n function(d) {\n return d[NA_STRING] !== true && d[value_key] === null;\n },\n {\n shapes: [\n {\n type: 'rectangle',\n fill: self.null_color,\n },\n ],\n legend_label: params.null_legend_label || 'Not a number',\n exclude_from_legend: false,\n legend_config: { type: 'rule', target: { [value_key]: null } },\n }\n );\n }\n\n static linInterpColors(\n t: number,\n begin_color: RGBAColor,\n end_color: RGBAColor\n ): RGBAColor {\n // 0 <= t <= 1\n return [\n Math.round(begin_color[0] * (1 - t) + end_color[0] * t),\n Math.round(begin_color[1] * (1 - t) + end_color[1] * t),\n Math.round(begin_color[2] * (1 - t) + end_color[2] * t),\n begin_color[3] * (1 - t) + end_color[3] * t,\n ];\n }\n\n private makeColorFn(\n colors: RGBAColor[],\n interpFn: (valToConvert: number) => number\n ) {\n const value_stop_points = this.value_stop_points;\n let stop_points: number[];\n if (value_stop_points) {\n stop_points = value_stop_points.map(interpFn);\n } else {\n stop_points = intRange(colors.length).map(function(x) {\n return x / (colors.length - 1);\n });\n }\n return function(t: number): RGBAColor {\n // 0 <= t <= 1\n var begin_interval_index = binarysearch(\n stop_points,\n t,\n function(x) {\n return x;\n },\n true\n );\n if (begin_interval_index === -1) {\n return [0, 0, 0, 1];\n }\n var end_interval_index = Math.min(\n colors.length - 1,\n begin_interval_index + 1\n );\n var spread =\n stop_points[end_interval_index] -\n stop_points[begin_interval_index];\n if (spread === 0) {\n return colors[end_interval_index];\n } else {\n var interval_t =\n (t - stop_points[begin_interval_index]) / spread;\n var begin_color = colors[begin_interval_index];\n var end_color = colors[end_interval_index];\n return GradientRuleSet.linInterpColors(\n interval_t,\n begin_color,\n end_color\n );\n }\n };\n }\n\n protected updateLinearRules() {\n let rule_id;\n if (typeof this.gradient_rule !== 'undefined') {\n rule_id = this.gradient_rule;\n this.removeRule(this.gradient_rule);\n }\n const interpFn = this.makeInterpFn();\n const colorFn = this.makeColorFn(this.colors, interpFn);\n const value_key = this.value_key;\n const null_color = this.null_color;\n\n this.gradient_rule = this.addRule(\n function(d) {\n return d[NA_STRING] !== true && d[value_key] !== null;\n },\n {\n shapes: [\n {\n type: 'rectangle',\n fill: function(d) {\n var t = interpFn(d[value_key]);\n return colorFn(t) as RGBAColor;\n },\n },\n ],\n exclude_from_legend: false,\n legend_config: {\n type: 'gradient' as 'gradient',\n range: this.getEffectiveValueRange(),\n colorFn: colorFn,\n },\n },\n rule_id\n );\n }\n}\n\nclass BarRuleSet extends LinearInterpRuleSet {\n private fill: RGBAColor;\n private negative_fill: RGBAColor;\n private bar_rule?: RuleId;\n\n constructor(params: IBarRuleSetParams) {\n super(params);\n this.fill = params.fill || [0, 128, 0, 1]; // green\n this.negative_fill = params.negative_fill || [255, 0, 0, 1]; //red\n }\n\n protected updateLinearRules() {\n let rule_id;\n if (typeof this.bar_rule !== 'undefined') {\n rule_id = this.bar_rule;\n this.removeRule(this.bar_rule);\n }\n const interpFn = this.makeInterpFn();\n const value_key = this.value_key;\n const positive_color = this.fill;\n const negative_color = this.negative_fill;\n const yPosFn = this.getYPosPercentagesFn();\n const cellHeightFn = this.getCellHeightPercentagesFn();\n this.bar_rule = this.addRule(\n function(d) {\n return d[NA_STRING] !== true;\n },\n {\n shapes: [\n {\n type: 'rectangle',\n y: function(d) {\n var t = interpFn(d[value_key]);\n return yPosFn(t);\n },\n height: function(d) {\n var t = interpFn(d[value_key]);\n return cellHeightFn(t);\n },\n fill: function(d) {\n return d[value_key] < 0\n ? negative_color\n : positive_color;\n },\n },\n ],\n exclude_from_legend: false,\n legend_config: {\n type: 'number' as 'number',\n range: this.getEffectiveValueRange(),\n range_type: this.getValueRangeType(),\n positive_color: positive_color,\n negative_color: negative_color,\n interpFn: interpFn,\n },\n },\n rule_id\n );\n }\n\n public getYPosPercentagesFn() {\n let ret;\n switch (this.getValueRangeType()) {\n case LinearInterpRangeType.NON_POSITIVE:\n ret = function(t: number) {\n return 0;\n };\n break;\n case LinearInterpRangeType.NON_NEGATIVE:\n ret = function(t: number) {\n return (1 - t) * 100;\n };\n break;\n case LinearInterpRangeType.ALL:\n ret = function(t: number) {\n return Math.min(1 - t, 1) * 50;\n };\n break;\n }\n return ret;\n }\n\n public getCellHeightPercentagesFn() {\n let ret;\n switch (this.getValueRangeType()) {\n case LinearInterpRangeType.NON_POSITIVE:\n ret = function(t: number) {\n return -t * 100;\n };\n break;\n case LinearInterpRangeType.NON_NEGATIVE:\n ret = function(t: number) {\n return t * 100;\n };\n break;\n case LinearInterpRangeType.ALL:\n ret = function(t: number) {\n return Math.abs(t) * 50;\n };\n break;\n }\n return ret;\n }\n}\n\nclass StackedBarRuleSet extends ConditionRuleSet {\n constructor(params: IStackedBarRuleSetParams) {\n super(params);\n const value_key = params.value_key;\n const fills = params.fills || [];\n const categories = params.categories || [];\n const getUnusedColor = makeUniqueColorGetter(fills.map(rgbaToHex));\n\n // Initialize with default values\n while (fills.length < categories.length) {\n fills.push(getUnusedColor());\n }\n\n const self = this;\n for (let i = 0; i < categories.length; i++) {\n (function(I) {\n const legend_target: any = {};\n legend_target[value_key] = {};\n for (let j = 0; j < categories.length; j++) {\n legend_target[value_key][categories[j]] = 0;\n }\n legend_target[value_key][categories[I]] = 1;\n self.addRule(\n function(d) {\n return d[NA_STRING] !== true;\n },\n {\n shapes: [\n {\n type: 'rectangle',\n fill: fills[I],\n width: 100,\n height: function(d) {\n var total = 0;\n for (\n var j = 0;\n j < categories.length;\n j++\n ) {\n total += parseFloat(\n d[value_key][categories[j]]\n );\n }\n return (\n (parseFloat(\n d[value_key][categories[I]]\n ) *\n 100) /\n total\n );\n },\n y: function(d) {\n var total = 0;\n var prev_vals_sum = 0;\n for (\n var j = 0;\n j < categories.length;\n j++\n ) {\n var new_val = parseFloat(\n d[value_key][categories[j]]\n );\n if (j < I) {\n prev_vals_sum += new_val;\n }\n total += new_val;\n }\n return (prev_vals_sum * 100) / total;\n },\n },\n ],\n exclude_from_legend: false,\n legend_config: { type: 'rule', target: legend_target },\n legend_label: categories[I],\n }\n );\n })(i);\n }\n }\n}\n\nexport class GeneticAlterationRuleSet extends LookupRuleSet {\n constructor(params: IGeneticAlterationRuleSetParams) {\n super(params);\n this.addRulesFromParams(params);\n this.addRule(NA_STRING, true, {\n shapes: params.na_shapes || makeNAShapes(params.na_z || 1),\n legend_label: params.na_legend_label || NA_LABEL,\n exclude_from_legend: false,\n legend_config: { type: 'rule', target: { na: true } },\n legend_order: Number.POSITIVE_INFINITY,\n });\n }\n\n private addRulesFromParams(params: IGeneticAlterationRuleSetParams) {\n const rule_params = params.rule_params;\n _.forEach(\n rule_params.conditional,\n (\n datumValuesToRuleParams: GeneticAlterationRuleParams['conditional']['datumKey'],\n datumKey: string\n ) => {\n _.forEach(\n datumValuesToRuleParams,\n (\n ruleParams: GeneticAlterationSingleRuleParams,\n commaSeparatedDatumValues: string\n ) => {\n const equiv_values = commaSeparatedDatumValues.split(\n ','\n );\n const legend_rule_target: any = {};\n legend_rule_target[\n equiv_values[0]\n ] = commaSeparatedDatumValues;\n const rule_id = this.addRule(\n datumKey,\n equiv_values[0] === '*' ? null : equiv_values[0],\n shallowExtend(ruleParams, {\n shapes: ruleParams.shapes,\n legend_config: {\n type: 'rule' as 'rule',\n target: legend_rule_target,\n },\n legend_base_color: ifndef(\n this.legend_base_color,\n [255, 255, 255, 1]\n ) as [number, number, number, number],\n })\n );\n for (let i = 1; i < equiv_values.length; i++) {\n this.linkExistingRule(\n datumKey,\n equiv_values[i] === '*'\n ? null\n : equiv_values[i],\n rule_id\n );\n }\n }\n );\n }\n );\n\n if (rule_params.always) {\n this.addRule(\n null,\n null,\n shallowExtend(rule_params.always, {\n shapes: rule_params.always.shapes,\n legend_config: { type: 'rule' as 'rule', target: {} },\n })\n );\n }\n }\n}\n\nexport class Rule {\n private shapes: Shape[];\n public legend_label: string;\n public legend_base_color?: RGBAColor;\n public exclude_from_legend?: boolean;\n private legend_config?: RuleLegendConfig;\n public legend_order?: number;\n\n constructor(params: RuleParams) {\n this.shapes = params.shapes.map(function(shape) {\n if (shape.type === 'rectangle') {\n return new Rectangle(shape);\n } else if (shape.type === 'triangle') {\n return new Triangle(shape);\n } else if (shape.type === 'ellipse') {\n return new Ellipse(shape);\n } else if (shape.type === 'line') {\n return new Line(shape);\n }\n return undefined;\n });\n this.legend_label =\n typeof params.legend_label === 'undefined'\n ? ''\n : params.legend_label;\n this.legend_base_color = params.legend_base_color;\n this.exclude_from_legend = params.exclude_from_legend;\n this.legend_config = params.legend_config;\n this.legend_order = params.legend_order;\n }\n public getLegendConfig() {\n return this.legend_config;\n }\n\n public apply(d: Datum, cell_width: number, cell_height: number) {\n // Gets concrete shapes (i.e. computed\n // real values from percentages)\n const concrete_shapes = [];\n for (let i = 0, shapes_len = this.shapes.length; i < shapes_len; i++) {\n concrete_shapes.push(\n this.shapes[i].getComputedParams(d, cell_width, cell_height)\n );\n }\n return concrete_shapes;\n }\n\n public isExcludedFromLegend() {\n return this.exclude_from_legend;\n }\n}\n\nclass GradientCategoricalRuleSet extends RuleSet {\n private gradientRuleSet: GradientRuleSet;\n private categoricalRuleSet: CategoricalRuleSet;\n constructor(params: IGradientAndCategoricalRuleSetParams) {\n super(params);\n // For the GradientCategoricalRuleSet a datum must always have a\n // value and may have a category attribute. A datum is 'NA'\n // when not meeting the requirements for the GradientRuleSet.\n // To achieve correct evaluation, the CategoricalRuleSet is\n // asked not to contribute an `NA` rule (via `true` flag).\n this.gradientRuleSet = new GradientRuleSet(params);\n this.categoricalRuleSet = new CategoricalRuleSet(params, true);\n }\n\n // RuleSet API\n public getSpecificShapesForDatum(\n data: Datum,\n cell_width: number,\n cell_height: number,\n out_active_rules: ActiveRules | undefined,\n data_id_key: string & keyof Datum,\n important_ids?: ColumnProp<boolean>\n ) {\n const shapes = [];\n // check the type of datum (categorical or continuous) and delegate\n // fetching of shapes to the appropriate RuleSet class\n for (let i = 0; i < data.length; i++) {\n const datum = data[i];\n if (this.isCategorical(datum)) {\n shapes.push(\n this.categoricalRuleSet.getSpecificShapesForDatum(\n [datum],\n cell_width,\n cell_height,\n out_active_rules,\n data_id_key,\n important_ids\n )[0]\n );\n } else {\n shapes.push(\n this.gradientRuleSet.getSpecificShapesForDatum(\n [datum],\n cell_width,\n cell_height,\n out_active_rules,\n data_id_key,\n important_ids\n )[0]\n );\n }\n }\n return shapes;\n }\n\n // RuleSet API\n public getSpecificRulesForDatum(datum?: Datum) {\n const categoricalRules = this.categoricalRuleSet.getSpecificRulesForDatum(\n datum\n );\n const gradientRules = this.gradientRuleSet.getSpecificRulesForDatum(\n datum\n );\n const rules = categoricalRules.concat(gradientRules);\n return rules;\n }\n\n // helper function\n public isCategorical(datum: Datum) {\n // A categorical value is recognized by presence of a category attribute.\n // Note: a categorical datum still requires a continuous value (used for clustering).\n return datum[this.categoricalRuleSet.category_key] !== undefined;\n }\n}\n\nexport default function(params: RuleSetParams) {\n let ret: RuleSet;\n switch (params.type) {\n case RuleSetType.CATEGORICAL:\n ret = new CategoricalRuleSet(params as ICategoricalRuleSetParams);\n break;\n case RuleSetType.GRADIENT:\n ret = new GradientRuleSet(params as IGradientRuleSetParams);\n break;\n case RuleSetType.GRADIENT_AND_CATEGORICAL:\n ret = new GradientCategoricalRuleSet(\n params as IGradientAndCategoricalRuleSetParams\n );\n break;\n case RuleSetType.BAR:\n ret = new BarRuleSet(params as IBarRuleSetParams);\n break;\n case RuleSetType.STACKED_BAR:\n ret = new StackedBarRuleSet(params as IStackedBarRuleSetParams);\n break;\n case RuleSetType.GENE:\n default:\n ret = new GeneticAlterationRuleSet(\n params as IGeneticAlterationRuleSetParams\n );\n break;\n }\n return ret;\n}\n","var img = \"data:image/svg+xml,%3c%3fxml version='1.0' encoding='utf-8'%3f%3e%3c!-- Generator: Adobe Illustrator 16.0.4%2c SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3e%3c!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='4px' height='16px' viewBox='-0.031 0 4 16' enable-background='new -0.031 0 4 16' xml:space='preserve'%3e%3ccircle fill='%23B2B3B3' cx='1.969' cy='4' r='1.5'/%3e%3ccircle fill='%23B2B3B3' cx='1.969' cy='8' r='1.5'/%3e%3ccircle fill='%23B2B3B3' cx='1.969' cy='12' r='1.5'/%3e%3c/svg%3e\";\n export default img;","import OncoprintModel from './oncoprintmodel';\nimport menuDotsIcon from '../img/menudots.svg';\nimport svgfactory from './svgfactory';\nimport $ from 'jquery';\nimport ClickEvent = JQuery.ClickEvent;\nimport { CLOSE_MENUS_EVENT as TRACK_OPTIONS_VIEW_CLOSE_MENUS_EVENT } from './oncoprinttrackoptionsview';\n\nconst MENU_DOTS_SIZE = 20;\nconst LABEL_CLASS = 'oncoprintjs__header__label';\nconst TOGGLE_BTN_CLASS = 'oncoprintjs__header__toggle_btn_img';\nconst TOGGLE_BTN_OPEN_CLASS = 'oncoprintjs__header__open';\nconst DROPDOWN_CLASS = 'oncoprintjs__header__dropdown';\nconst SEPARATOR_CLASS = 'oncoprintjs__header__separator';\nconst NTH_CLASS_PREFIX = 'track-group-';\n\nconst FADE_MS = 100;\n\nconst HEADER_FONT_SIZE = 16;\n\nexport const CLOSE_MENUS_EVENT = 'oncoprint-header-view.do-close-menus';\n\nexport default class OncoprintHeaderView {\n private rendering_suppressed = false;\n private $occluded_ctr: JQuery; // holds labels and menu buttons, which can be occluded by scrolling\n private $dropdowns_ctr: JQuery;\n private clickHandler: () => void;\n private $dropdowns: JQuery[] = [];\n\n constructor($div: JQuery) {\n $div.css({\n position: 'relative',\n 'pointer-events': 'none',\n });\n\n const $occluding_superctr = $('<div/>')\n .appendTo($div)\n .css({\n position: 'relative',\n 'overflow-y': 'hidden',\n 'overflow-x': 'hidden',\n width: '100%',\n height: '100%',\n });\n this.$occluded_ctr = $('<div/>')\n .appendTo($occluding_superctr)\n .css({\n position: 'absolute',\n width: '100%',\n height: '100%',\n });\n\n this.$dropdowns_ctr = $('<div/>')\n .appendTo($div)\n .css({\n position: 'absolute',\n width: '100%',\n height: '100%',\n });\n\n this.clickHandler = () => {\n $(document).trigger(CLOSE_MENUS_EVENT);\n };\n $(document).on('click', this.clickHandler);\n\n $(document).on(CLOSE_MENUS_EVENT, () => {\n this.closeAllDropdowns();\n });\n }\n\n public destroy() {\n $(document).off('click', this.clickHandler);\n $(document).off(CLOSE_MENUS_EVENT);\n }\n\n private closeAllDropdowns() {\n for (const $dropdown of this.$dropdowns) {\n $dropdown.fadeOut(FADE_MS);\n }\n }\n\n private closeDropdownsExcept($keep_open_dropdown: JQuery) {\n for (const $dropdown of this.$dropdowns) {\n if ($dropdown !== $keep_open_dropdown) {\n $dropdown.fadeOut(FADE_MS);\n }\n }\n $(document).trigger(TRACK_OPTIONS_VIEW_CLOSE_MENUS_EVENT);\n }\n\n private static $makeDropdownOption(\n text: string,\n weight: string,\n isDisabled?: () => boolean,\n callback?: (evt: ClickEvent) => void\n ) {\n const li = $('<li>')\n .text(text)\n .css({\n 'font-weight': weight,\n 'font-size': 12,\n 'border-bottom': '1px solid rgba(0,0,0,0.3)',\n });\n const disabled = isDisabled && isDisabled();\n if (!disabled) {\n if (callback) {\n li.addClass('clickable');\n li.css({ cursor: 'pointer' });\n li.click(callback).hover(\n function() {\n $(this).css({ 'background-color': 'rgb(200,200,200)' });\n },\n function() {\n $(this).css({\n 'background-color': 'rgba(255,255,255,0)',\n });\n }\n );\n } else {\n li.click(function(evt) {\n evt.stopPropagation();\n });\n }\n } else {\n li.addClass('disabled');\n li.css({ color: 'rgb(200, 200, 200)', cursor: 'default' });\n }\n return li;\n }\n\n private static $makeDropdownSeparator() {\n return $('<li>')\n .css({ 'border-top': '1px solid black' })\n .addClass(SEPARATOR_CLASS);\n }\n\n public render(model: OncoprintModel) {\n // clear existing elements\n this.$occluded_ctr.empty();\n this.$occluded_ctr.css({\n top: -model.getVertScroll(),\n });\n this.$dropdowns_ctr.empty();\n this.$dropdowns_ctr.css({\n top: -model.getVertScroll(),\n });\n this.$dropdowns = [];\n\n // add headers\n const trackGroups = model.getTrackGroups();\n const headerTops = model.getZoomedHeaderTops();\n\n trackGroups.forEach((group, trackGroupIndex) => {\n if (group.header) {\n const $headerDiv = $('<div/>').css({\n 'pointer-events': 'auto',\n });\n\n // add label\n $(`<span>${group.header.label.text}</span>`)\n .appendTo($headerDiv)\n .css({\n 'margin-right': 10,\n // TODO - custom styling\n 'font-weight': 'bold',\n 'text-decoration': 'underline',\n 'font-size': HEADER_FONT_SIZE,\n 'font-family': 'Arial',\n })\n .addClass(LABEL_CLASS);\n\n if (group.header.options.length > 0) {\n // add dropdown menu\n const $dropdown = $('<ul>')\n .appendTo(this.$dropdowns_ctr)\n .css({\n position: 'absolute',\n width: 120,\n display: 'none',\n 'list-style-type': 'none',\n 'padding-left': '6',\n 'padding-right': '6',\n float: 'right',\n 'background-color': 'rgb(255,255,255)',\n left: '0px',\n top: headerTops[trackGroupIndex] + MENU_DOTS_SIZE,\n 'pointer-events': 'auto',\n })\n .addClass(DROPDOWN_CLASS)\n .addClass(NTH_CLASS_PREFIX + trackGroupIndex);\n\n this.$dropdowns.push($dropdown);\n\n const populateDropdownOptions = () => {\n // repopulate dropdown every time it opens, and every time an option is clicked,\n // in order to update dynamic disabled status and weight\n $dropdown.empty();\n // add dropdown options\n group.header.options.forEach(option => {\n if (option.separator) {\n $dropdown.append(\n OncoprintHeaderView.$makeDropdownSeparator()\n );\n } else {\n $dropdown.append(\n OncoprintHeaderView.$makeDropdownOption(\n option.label || '',\n option.weight\n ? option.weight()\n : 'normal',\n option.disabled,\n function(evt) {\n evt.stopPropagation();\n option.onClick &&\n option.onClick(trackGroupIndex);\n populateDropdownOptions();\n }\n )\n );\n }\n });\n };\n\n // add dropdown button\n const $img = $('<img/>')\n .appendTo($headerDiv)\n .attr({\n src: menuDotsIcon,\n width: MENU_DOTS_SIZE,\n height: MENU_DOTS_SIZE,\n })\n .css({\n cursor: 'pointer',\n border: '1px solid rgba(125,125,125,0)',\n display: 'inline-block',\n })\n .addClass(TOGGLE_BTN_CLASS)\n .addClass(NTH_CLASS_PREFIX + trackGroupIndex)\n .on('click', evt => {\n evt.stopPropagation();\n if ($dropdown.is(':visible')) {\n $img.removeClass(TOGGLE_BTN_OPEN_CLASS);\n $dropdown.fadeOut(FADE_MS);\n } else {\n populateDropdownOptions();\n $dropdown.css('left', $img.offset().left);\n $img.addClass(TOGGLE_BTN_OPEN_CLASS);\n $dropdown.fadeIn(FADE_MS);\n this.closeDropdownsExcept($dropdown);\n }\n });\n }\n\n $headerDiv.css({\n position: 'absolute',\n top: headerTops[trackGroupIndex],\n left: 0,\n width: '100%',\n });\n this.$occluded_ctr.append($headerDiv);\n }\n });\n }\n\n public setScroll(model: OncoprintModel) {\n this.$occluded_ctr.css({\n top: -model.getVertScroll(),\n });\n this.$dropdowns_ctr.css({\n top: -model.getVertScroll(),\n });\n\n this.closeAllDropdowns();\n }\n\n public setVertScroll(model: OncoprintModel) {\n this.setScroll(model);\n }\n\n public suppressRendering() {\n this.rendering_suppressed = true;\n }\n public releaseRendering(model: OncoprintModel) {\n this.rendering_suppressed = false;\n this.render(model);\n }\n public toSVGGroup(\n model: OncoprintModel,\n offset_x: number,\n offset_y: number\n ) {\n const group = svgfactory.group(offset_x || 0, offset_y || 0);\n const trackGroups = model.getTrackGroups();\n const headerTops = model.getZoomedHeaderTops();\n\n trackGroups.forEach((trackGroup, index) => {\n const header = trackGroup.header;\n if (header) {\n const y = headerTops[index];\n group.appendChild(\n svgfactory.text(\n header.label.text,\n 0,\n y,\n HEADER_FONT_SIZE,\n 'Arial',\n 'bold',\n undefined,\n undefined,\n 'underline'\n )\n );\n }\n });\n\n return group;\n }\n}\n","import $ from 'jquery';\nimport menuDotsIcon from '../img/menudots.svg';\nimport OncoprintModel, {\n TrackGroupProp,\n TrackId,\n TrackProp,\n TrackSortDirection,\n} from './oncoprintmodel';\nimport ClickEvent = JQuery.ClickEvent;\nimport { CLOSE_MENUS_EVENT as HEADER_VIEW_CLOSE_MENUS_EVENT } from './oncoprintheaderview';\n\nconst TOGGLE_BTN_CLASS = 'oncoprintjs__track_options__toggle_btn_img';\nconst TOGGLE_BTN_OPEN_CLASS = 'oncoprintjs__track_options__open';\nconst DROPDOWN_CLASS = 'oncoprintjs__track_options__dropdown';\nconst SEPARATOR_CLASS = 'oncoprintjs__track_options__separator';\nconst NTH_CLASS_PREFIX = 'nth-';\n\nexport const CLOSE_MENUS_EVENT = 'oncoprint-track-options-view.do-close-menus';\n\ntype TrackCallback = (trackId: TrackId) => void;\nexport default class OncoprintTrackOptionsView {\n private $ctr: JQuery;\n private $buttons_ctr: JQuery;\n private $dropdown_ctr: JQuery;\n\n private img_size: number;\n private rendering_suppressed = false;\n private track_options_$elts: TrackProp<{\n $div: JQuery;\n $img: JQuery;\n $dropdown: JQuery;\n }> = {};\n private menu_shown: TrackProp<boolean> = {};\n private clickHandler: () => void;\n private interaction_disabled = false;\n\n constructor(\n private $div: JQuery,\n private moveUpCallback: TrackCallback,\n private moveDownCallback: TrackCallback,\n private removeCallback: TrackCallback,\n private sortChangeCallback: (\n trackId: TrackId,\n sortDirection: TrackSortDirection\n ) => void,\n private unexpandCallback: TrackCallback,\n private showGapsCallback: (trackId: TrackId, showGaps: boolean) => void\n ) {\n const position = $div.css('position');\n if (position !== 'absolute' && position !== 'relative') {\n console.log(\n 'WARNING: div passed to OncoprintTrackOptionsView must be absolute or relative positioned - layout problems will occur'\n );\n }\n\n this.$ctr = $('<div></div>')\n .css({\n position: 'absolute',\n 'overflow-y': 'hidden',\n 'overflow-x': 'hidden',\n })\n .appendTo(this.$div);\n this.$buttons_ctr = $('<div></div>')\n .css({ position: 'absolute' })\n .appendTo(this.$ctr);\n this.$dropdown_ctr = $('<div></div>')\n .css({ position: 'absolute' })\n .appendTo(this.$div);\n\n const self = this;\n this.clickHandler = function() {\n $(document).trigger(CLOSE_MENUS_EVENT);\n };\n $(document).on('click', this.clickHandler);\n }\n\n private renderAllOptions(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n const self = this;\n $(document).off(CLOSE_MENUS_EVENT);\n $(document).on(CLOSE_MENUS_EVENT, function() {\n self.hideAllMenus();\n });\n\n this.$buttons_ctr.empty();\n this.$dropdown_ctr.empty();\n this.scroll(model.getVertScroll());\n\n var tracks = model.getTracks();\n var minimum_track_height = Number.POSITIVE_INFINITY;\n for (let i = 0; i < tracks.length; i++) {\n minimum_track_height = Math.min(\n minimum_track_height,\n model.getTrackHeight(tracks[i])\n );\n }\n this.img_size = Math.floor(minimum_track_height * 0.75);\n\n for (let i = 0; i < tracks.length; i++) {\n this.renderTrackOptions(model, tracks[i], i);\n }\n }\n\n private scroll(scroll_y: number) {\n if (this.rendering_suppressed) {\n return;\n }\n this.$buttons_ctr.css({ top: -scroll_y });\n this.$dropdown_ctr.css({ top: -scroll_y });\n\n this.hideAllMenus();\n }\n\n private resize(model: OncoprintModel, getCellViewHeight: () => number) {\n if (this.rendering_suppressed) {\n return;\n }\n this.$div.css({ width: this.getWidth(), height: getCellViewHeight() });\n this.$ctr.css({ width: this.getWidth(), height: getCellViewHeight() });\n }\n\n private hideTrackMenu(track_id: TrackId) {\n this.menu_shown[track_id] = false;\n const $elts = this.track_options_$elts[track_id];\n $elts.$dropdown.css({ 'z-index': 1 });\n $elts.$dropdown.css({ border: '1px solid rgba(125,125,125,0)' });\n $elts.$img.css({ border: '1px solid rgba(125,125,125,0)' });\n $elts.$dropdown.fadeOut(100);\n }\n\n private showTrackMenu(track_id: TrackId) {\n this.menu_shown[track_id] = true;\n const $elts = this.track_options_$elts[track_id];\n $elts.$dropdown.css({ 'z-index': 10 });\n $elts.$dropdown.css({ border: '1px solid rgba(125,125,125,1)' });\n $elts.$img.css({ border: '1px solid rgba(125,125,125,1)' });\n $elts.$dropdown.fadeIn(100);\n }\n\n private hideAllMenus() {\n for (const track_id in this.track_options_$elts) {\n if (this.track_options_$elts.hasOwnProperty(track_id)) {\n this.hideTrackMenu(parseInt(track_id, 10));\n }\n }\n }\n\n private hideMenusExcept(track_id: TrackId) {\n for (const _other_track_id in this.track_options_$elts) {\n if (this.track_options_$elts.hasOwnProperty(_other_track_id)) {\n const other_track_id = parseInt(_other_track_id, 10);\n if (other_track_id === track_id) {\n continue;\n }\n this.hideTrackMenu(other_track_id);\n }\n }\n\n $(document).trigger(HEADER_VIEW_CLOSE_MENUS_EVENT);\n }\n\n private static $makeDropdownOption(\n text: string,\n weight: string,\n disabled?: boolean,\n callback?: (evt: ClickEvent) => void\n ) {\n const li = $('<li>')\n .text(text)\n .css({\n 'font-weight': weight,\n 'font-size': 12,\n 'border-bottom': '1px solid rgba(0,0,0,0.3)',\n });\n if (!disabled) {\n if (callback) {\n li.addClass('clickable');\n li.css({ cursor: 'pointer' });\n li.click(callback).hover(\n function() {\n $(this).css({ 'background-color': 'rgb(200,200,200)' });\n },\n function() {\n $(this).css({\n 'background-color': 'rgba(255,255,255,0)',\n });\n }\n );\n } else {\n li.click(function(evt) {\n evt.stopPropagation();\n });\n }\n } else {\n li.addClass('disabled');\n li.css({ color: 'rgb(200, 200, 200)', cursor: 'default' });\n }\n return li;\n }\n\n private static $makeDropdownSeparator() {\n return $('<li>')\n .css({ 'border-top': '1px solid black' })\n .addClass(SEPARATOR_CLASS);\n }\n\n private static renderSortArrow(\n $sortarrow: JQuery,\n model: OncoprintModel,\n track_id: TrackId\n ) {\n let sortarrow_char = '';\n if (model.isTrackSortDirectionChangeable(track_id)) {\n sortarrow_char = {\n '1':\n '<i class=\"fa fa-signal\" aria-hidden=\"true\" title=\"Sorted ascending\"></i>',\n '-1':\n '<i class=\"fa fa-signal\" style=\"transform: scaleX(-1);\" aria-hidden=\"true\" title=\"Sorted descending\"></i>',\n '0': '',\n }[model.getTrackSortDirection(track_id)];\n }\n $sortarrow.html(sortarrow_char);\n }\n\n private renderTrackOptions(\n model: OncoprintModel,\n track_id: TrackId,\n index: number\n ) {\n let $div: JQuery, $img: JQuery, $sortarrow: JQuery, $dropdown: JQuery;\n const top = model.getZoomedTrackTops(track_id);\n $div = $('<div>')\n .appendTo(this.$buttons_ctr)\n .css({\n position: 'absolute',\n left: '0px',\n top: top + 'px',\n 'white-space': 'nowrap',\n });\n $img = $('<img/>')\n .appendTo($div)\n .attr({\n src: menuDotsIcon,\n width: this.img_size,\n height: this.img_size,\n })\n .css({\n float: 'left',\n cursor: 'pointer',\n border: '1px solid rgba(125,125,125,0)',\n })\n .addClass(TOGGLE_BTN_CLASS)\n .addClass(NTH_CLASS_PREFIX + (index + 1));\n $sortarrow = $('<span>')\n .appendTo($div)\n .css({\n position: 'absolute',\n top: Math.floor(this.img_size / 4) + 'px',\n });\n $dropdown = $('<ul>')\n .appendTo(this.$dropdown_ctr)\n .css({\n position: 'absolute',\n width: 120,\n display: 'none',\n 'list-style-type': 'none',\n 'padding-left': '6',\n 'padding-right': '6',\n float: 'right',\n 'background-color': 'rgb(255,255,255)',\n left: '0px',\n top: top + this.img_size + 'px',\n })\n .addClass(DROPDOWN_CLASS)\n .addClass(NTH_CLASS_PREFIX + (index + 1));\n this.track_options_$elts[track_id] = {\n $div: $div,\n $img: $img,\n $dropdown: $dropdown,\n };\n\n OncoprintTrackOptionsView.renderSortArrow($sortarrow, model, track_id);\n\n const self = this;\n $img.hover(\n function(evt) {\n if (!self.menu_shown[track_id]) {\n $(this).css({ border: '1px solid rgba(125,125,125,0.3)' });\n }\n },\n function(evt) {\n if (!self.menu_shown[track_id]) {\n $(this).css({ border: '1px solid rgba(125,125,125,0)' });\n }\n }\n );\n $img.click(function(evt) {\n evt.stopPropagation();\n if ($dropdown.is(':visible')) {\n $img.addClass(TOGGLE_BTN_OPEN_CLASS);\n self.hideTrackMenu(track_id);\n } else {\n $img.removeClass(TOGGLE_BTN_OPEN_CLASS);\n self.showTrackMenu(track_id);\n }\n self.hideMenusExcept(track_id);\n });\n\n const movingDisabled =\n model.getTrackMovable(track_id) &&\n model.isTrackInClusteredGroup(track_id);\n\n if (model.getTrackMovable(track_id)) {\n $dropdown.append(\n OncoprintTrackOptionsView.$makeDropdownOption(\n 'Move up',\n 'normal',\n movingDisabled,\n function(evt) {\n evt.stopPropagation();\n self.moveUpCallback(track_id);\n }\n )\n );\n $dropdown.append(\n OncoprintTrackOptionsView.$makeDropdownOption(\n 'Move down',\n 'normal',\n movingDisabled,\n function(evt) {\n evt.stopPropagation();\n self.moveDownCallback(track_id);\n }\n )\n );\n }\n if (model.isTrackRemovable(track_id)) {\n $dropdown.append(\n OncoprintTrackOptionsView.$makeDropdownOption(\n 'Remove track',\n 'normal',\n false,\n function(evt) {\n evt.stopPropagation();\n self.removeCallback(track_id);\n }\n )\n );\n }\n if (model.isTrackSortDirectionChangeable(track_id)) {\n $dropdown.append(\n OncoprintTrackOptionsView.$makeDropdownSeparator()\n );\n let $sort_inc_li: JQuery;\n let $sort_dec_li: JQuery;\n let $dont_sort_li: JQuery;\n $sort_inc_li = OncoprintTrackOptionsView.$makeDropdownOption(\n 'Sort a-Z',\n model.getTrackSortDirection(track_id) === 1 ? 'bold' : 'normal',\n false,\n function(evt) {\n evt.stopPropagation();\n $sort_inc_li.css('font-weight', 'bold');\n $sort_dec_li.css('font-weight', 'normal');\n $dont_sort_li.css('font-weight', 'normal');\n self.sortChangeCallback(track_id, 1);\n OncoprintTrackOptionsView.renderSortArrow(\n $sortarrow,\n model,\n track_id\n );\n }\n );\n $sort_dec_li = OncoprintTrackOptionsView.$makeDropdownOption(\n 'Sort Z-a',\n model.getTrackSortDirection(track_id) === -1\n ? 'bold'\n : 'normal',\n false,\n function(evt) {\n evt.stopPropagation();\n $sort_inc_li.css('font-weight', 'normal');\n $sort_dec_li.css('font-weight', 'bold');\n $dont_sort_li.css('font-weight', 'normal');\n self.sortChangeCallback(track_id, -1);\n OncoprintTrackOptionsView.renderSortArrow(\n $sortarrow,\n model,\n track_id\n );\n }\n );\n $dont_sort_li = OncoprintTrackOptionsView.$makeDropdownOption(\n \"Don't sort track\",\n model.getTrackSortDirection(track_id) === 0 ? 'bold' : 'normal',\n false,\n function(evt) {\n evt.stopPropagation();\n $sort_inc_li.css('font-weight', 'normal');\n $sort_dec_li.css('font-weight', 'normal');\n $dont_sort_li.css('font-weight', 'bold');\n self.sortChangeCallback(track_id, 0);\n OncoprintTrackOptionsView.renderSortArrow(\n $sortarrow,\n model,\n track_id\n );\n }\n );\n $dropdown.append($sort_inc_li);\n $dropdown.append($sort_dec_li);\n $dropdown.append($dont_sort_li);\n }\n if (model.isTrackExpandable(track_id)) {\n $dropdown.append(\n OncoprintTrackOptionsView.$makeDropdownOption(\n model.getExpandButtonText(track_id),\n 'normal',\n false,\n function(evt) {\n evt.stopPropagation();\n // close the menu to discourage clicking again, as it\n // may take a moment to finish expanding\n self.renderAllOptions(model);\n model.expandTrack(track_id);\n }\n )\n );\n }\n if (model.isTrackExpanded(track_id)) {\n $dropdown.append(\n OncoprintTrackOptionsView.$makeDropdownOption(\n 'Remove expansion',\n 'normal',\n false,\n function(evt) {\n evt.stopPropagation();\n self.unexpandCallback(track_id);\n }\n )\n );\n }\n if (model.getTrackCanShowGaps(track_id)) {\n $dropdown.append(\n OncoprintTrackOptionsView.$makeDropdownSeparator()\n );\n const $show_gaps_opt = OncoprintTrackOptionsView.$makeDropdownOption(\n 'Show gaps',\n model.getTrackShowGaps(track_id) ? 'bold' : 'normal',\n false,\n function(evt) {\n evt.stopPropagation();\n $show_gaps_opt.css('font-weight', 'bold');\n $dont_show_gaps_opt.css('font-weight', 'normal');\n self.showGapsCallback(track_id, true);\n }\n );\n const $dont_show_gaps_opt = OncoprintTrackOptionsView.$makeDropdownOption(\n \"Don't show gaps\",\n model.getTrackShowGaps(track_id) ? 'normal' : 'bold',\n false,\n function(evt) {\n evt.stopPropagation();\n\n $show_gaps_opt.css('font-weight', 'normal');\n $dont_show_gaps_opt.css('font-weight', 'bold');\n self.showGapsCallback(track_id, false);\n }\n );\n $dropdown.append($show_gaps_opt);\n $dropdown.append($dont_show_gaps_opt);\n }\n // Add custom options\n const custom_options = model.getTrackCustomOptions(track_id);\n if (custom_options && custom_options.length > 0) {\n for (var i = 0; i < custom_options.length; i++) {\n (function() {\n // wrapped in function to prevent scope issues\n var option = custom_options[i];\n if (option.separator) {\n $dropdown.append(\n OncoprintTrackOptionsView.$makeDropdownSeparator()\n );\n } else {\n $dropdown.append(\n OncoprintTrackOptionsView.$makeDropdownOption(\n option.label || '',\n option.weight || 'normal',\n option.disabled,\n option.onClick &&\n function(evt) {\n evt.stopPropagation();\n option.onClick(track_id);\n }\n )\n );\n }\n })();\n }\n }\n\n if ($dropdown.is(':empty')) {\n // if no options, then delete elements\n $div.remove();\n $dropdown.remove();\n }\n }\n\n public enableInteraction() {\n this.interaction_disabled = false;\n }\n public disableInteraction() {\n this.interaction_disabled = true;\n }\n public suppressRendering() {\n this.rendering_suppressed = true;\n }\n public releaseRendering(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.rendering_suppressed = false;\n this.renderAllOptions(model);\n this.resize(model, getCellViewHeight);\n this.scroll(model.getVertScroll());\n }\n public setScroll(model: OncoprintModel) {\n this.setVertScroll(model);\n }\n public setHorzScroll(model: OncoprintModel) {}\n public setVertScroll(model: OncoprintModel) {\n this.scroll(model.getVertScroll());\n }\n public setZoom(model: OncoprintModel, getCellViewHeight: () => number) {\n this.setVertZoom(model, getCellViewHeight);\n }\n public setVertZoom(model: OncoprintModel, getCellViewHeight: () => number) {\n this.renderAllOptions(model);\n this.resize(model, getCellViewHeight);\n }\n public setTrackGroupHeader(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.renderAllOptions(model);\n this.resize(model, getCellViewHeight);\n }\n public sort(model: OncoprintModel, getCellViewHeight: () => number) {\n this.renderAllOptions(model);\n this.resize(model, getCellViewHeight);\n }\n public setViewport(model: OncoprintModel, getCellViewHeight: () => number) {\n this.renderAllOptions(model);\n this.resize(model, getCellViewHeight);\n this.scroll(model.getVertScroll());\n }\n public getWidth() {\n if (this.$buttons_ctr.is(':empty')) {\n return 0;\n } else {\n return 18 + this.img_size;\n }\n }\n public setTrackShowGaps(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.renderAllOptions(model);\n this.resize(model, getCellViewHeight);\n }\n public addTracks(model: OncoprintModel, getCellViewHeight: () => number) {\n this.setTrackShowGaps(model, getCellViewHeight);\n this.renderAllOptions(model);\n this.resize(model, getCellViewHeight);\n }\n public moveTrack(model: OncoprintModel, getCellViewHeight: () => number) {\n this.renderAllOptions(model);\n this.resize(model, getCellViewHeight);\n }\n public setTrackGroupOrder(model: OncoprintModel) {\n this.renderAllOptions(model);\n }\n public setSortConfig(model: OncoprintModel) {\n this.renderAllOptions(model);\n }\n public removeTrack(\n model: OncoprintModel,\n track_id: TrackId,\n getCellViewHeight: () => number\n ) {\n delete this.track_options_$elts[track_id];\n this.renderAllOptions(model);\n this.resize(model, getCellViewHeight);\n }\n public destroy() {\n $(document).off('click', this.clickHandler);\n $(document).off(CLOSE_MENUS_EVENT);\n }\n public setTrackCustomOptions(model: OncoprintModel) {\n this.renderAllOptions(model);\n }\n public setTrackMovable(model: OncoprintModel) {\n this.renderAllOptions(model);\n }\n}\n","import svgfactory from './svgfactory';\nimport $ from 'jquery';\nimport OncoprintModel from './oncoprintmodel';\nimport { Rule, RuleWithId } from './oncoprintruleset';\n\nfunction nodeIsVisible(node: HTMLElement) {\n let ret = true;\n while (node && node.tagName.toLowerCase() !== 'html') {\n if ($(node).css('display') === 'none') {\n ret = false;\n break;\n }\n node = node.parentNode as HTMLElement;\n }\n return ret;\n}\n\nexport default class OncoprintLegendView {\n private $svg: JQuery<SVGElement>;\n private rendering_suppressed = false;\n private width: number;\n\n private rule_set_label_config = {\n weight: 'bold',\n size: 12,\n font: 'Arial',\n };\n private rule_label_config = {\n weight: 'normal',\n size: 12,\n font: 'Arial',\n };\n\n private padding_after_rule_set_label = 10;\n private padding_between_rules = 20;\n private padding_between_rule_set_rows = 10;\n\n constructor(\n private $div: JQuery,\n private base_width: number,\n private base_height: number\n ) {\n this.$svg = $(svgfactory.svg(200, 200)).appendTo(this.$div);\n this.width = $div.width();\n }\n\n private renderLegend(\n model: OncoprintModel,\n target_svg?: SVGElement,\n show_all?: boolean\n ) {\n if (this.rendering_suppressed) {\n return;\n }\n if (typeof target_svg === 'undefined') {\n target_svg = this.$svg[0];\n }\n if (!nodeIsVisible((target_svg as any) as HTMLElement)) {\n return;\n }\n $(target_svg).empty();\n const defs = svgfactory.defs();\n target_svg.appendChild(defs);\n\n const everything_group = svgfactory.group(0, 0);\n target_svg.appendChild(everything_group);\n\n const rule_sets = model.getRuleSets();\n let y = 0;\n const rule_start_x = 200;\n for (let i = 0; i < rule_sets.length; i++) {\n if (rule_sets[i].exclude_from_legend && !show_all) {\n continue;\n }\n const rules = model.getActiveRules(rule_sets[i].rule_set_id);\n if (rules.length === 0) {\n // dont render this ruleset into legend if no active rules\n continue;\n }\n const rule_set_group = svgfactory.group(0, y);\n everything_group.appendChild(rule_set_group);\n (function addLabel() {\n if (\n typeof rule_sets[i].legend_label !== 'undefined' &&\n rule_sets[i].legend_label.length > 0\n ) {\n const label = svgfactory.text(\n rule_sets[i].legend_label,\n 0,\n 0,\n 12,\n 'Arial',\n 'bold'\n );\n rule_set_group.appendChild(label);\n svgfactory.wrapText(label, rule_start_x);\n }\n })();\n\n let x = rule_start_x + this.padding_after_rule_set_label;\n let in_group_y_offset = 0;\n\n const labelSort = function(ruleA: RuleWithId, ruleB: RuleWithId) {\n const labelA = ruleA.rule.legend_label;\n const labelB = ruleB.rule.legend_label;\n if (labelA && labelB) {\n return labelA.localeCompare(labelB);\n } else if (!labelA && !labelB) {\n return 0;\n } else if (!labelA) {\n return -1;\n } else if (!labelB) {\n return 1;\n }\n return 0;\n };\n\n rules.sort(function(ruleA, ruleB) {\n // sort, by legend_order, then alphabetically\n const orderA = ruleA.rule.legend_order;\n const orderB = ruleB.rule.legend_order;\n\n if (\n typeof orderA === 'undefined' &&\n typeof orderB === 'undefined'\n ) {\n // if neither have defined order, then sort alphabetically\n return labelSort(ruleA, ruleB);\n } else if (\n typeof orderA !== 'undefined' &&\n typeof orderB !== 'undefined'\n ) {\n // if both have defined order, sort by order\n if (orderA < orderB) {\n return -1;\n } else if (orderA > orderB) {\n return 1;\n } else {\n // if order is same, sort alphabetically\n return labelSort(ruleA, ruleB);\n }\n } else if (typeof orderA === 'undefined') {\n if (orderB === Number.POSITIVE_INFINITY) {\n return -1; // A comes before B regardless, if B is forced to end\n } else {\n //otherwise, A comes after B if B has defined order and A doesnt\n return 1;\n }\n } else if (typeof orderB === 'undefined') {\n if (orderA === Number.POSITIVE_INFINITY) {\n return 1; // A comes after B regardless, if A is forced to end\n } else {\n // otherwise, A comes before B if A has defined order and B doesnt\n return -1;\n }\n }\n return 0;\n });\n for (let j = 0; j < rules.length; j++) {\n const rule = rules[j].rule;\n if (rule.exclude_from_legend) {\n continue;\n }\n const group = this.ruleToSVGGroup(\n rule,\n model,\n target_svg,\n defs\n );\n group.setAttribute(\n 'transform',\n 'translate(' + x + ',' + in_group_y_offset + ')'\n );\n rule_set_group.appendChild(group);\n if (x + group.getBBox().width > this.width) {\n x = rule_start_x + this.padding_after_rule_set_label;\n in_group_y_offset =\n rule_set_group.getBBox().height +\n this.padding_between_rule_set_rows;\n group.setAttribute(\n 'transform',\n 'translate(' + x + ',' + in_group_y_offset + ')'\n );\n }\n x += group.getBBox().width;\n x += this.padding_between_rules;\n }\n y += rule_set_group.getBBox().height;\n y += 3 * this.padding_between_rule_set_rows;\n }\n const everything_box = everything_group.getBBox();\n this.$svg[0].setAttribute('width', everything_box.width.toString());\n // add 10px to height to give room for rectangle stroke, which doesn't factor in accurately into the bounding box\n // so that bounding boxes are too small to show the entire stroke (see https://github.com/cBioPortal/cbioportal/issues/3994)\n this.$svg[0].setAttribute(\n 'height',\n (everything_box.height + 10).toString()\n );\n }\n\n private ruleToSVGGroup(\n rule: Rule,\n model: OncoprintModel,\n target_svg: SVGElement,\n target_defs: SVGDefsElement\n ) {\n const root = svgfactory.group(0, 0);\n const config = rule.getLegendConfig();\n if (config.type === 'rule') {\n const concrete_shapes = rule.apply(\n config.target,\n model.getCellWidth(true),\n this.base_height\n );\n if (rule.legend_base_color) {\n // generate backgrounds\n const baseRect = svgfactory.rect(\n 0,\n 0,\n model.getCellWidth(true),\n this.base_height,\n {\n type: 'rgba',\n value: rule.legend_base_color,\n }\n );\n root.appendChild(baseRect);\n }\n // generate shapes\n for (let i = 0; i < concrete_shapes.length; i++) {\n root.appendChild(\n svgfactory.fromShape(concrete_shapes[i], 0, 0)\n );\n }\n if (typeof rule.legend_label !== 'undefined') {\n const font_size = 12;\n const text_node = svgfactory.text(\n rule.legend_label,\n model.getCellWidth(true) + 5,\n this.base_height / 2,\n font_size,\n 'Arial',\n 'normal'\n );\n target_svg.appendChild(text_node);\n const height = text_node.getBBox().height;\n text_node.setAttribute(\n 'y',\n (\n parseFloat(text_node.getAttribute('y')) -\n height / 2\n ).toString()\n );\n target_svg.removeChild(text_node);\n root.appendChild(text_node);\n }\n } else if (config.type === 'number') {\n const num_decimal_digits = 2;\n const display_range = config.range.map(function(x) {\n const num_digit_multiplier = Math.pow(10, num_decimal_digits);\n return (\n Math.round(x * num_digit_multiplier) / num_digit_multiplier\n );\n });\n root.appendChild(\n svgfactory.text(\n display_range[0].toString(),\n 0,\n 0,\n 12,\n 'Arial',\n 'normal'\n )\n );\n root.appendChild(\n svgfactory.text(\n display_range[1].toString(),\n 50,\n 0,\n 12,\n 'Arial',\n 'normal'\n )\n );\n const mesh = 100;\n const points: [number, number][] = [];\n let fill = null;\n let linear_gradient = null;\n if (config.range_type === 'NON_POSITIVE') {\n fill = config.negative_color;\n } else if (config.range_type === 'NON_NEGATIVE') {\n fill = config.positive_color;\n } else if (config.range_type === 'ALL') {\n linear_gradient = svgfactory.linearGradient();\n const offset =\n (Math.abs(display_range[0]) /\n (Math.abs(display_range[0]) + display_range[1])) *\n 100;\n linear_gradient.appendChild(\n svgfactory.stop(offset, config.negative_color)\n );\n linear_gradient.appendChild(\n svgfactory.stop(offset, config.positive_color)\n );\n target_defs.appendChild(linear_gradient);\n }\n points.push([5, 20]);\n for (let i = 0; i < mesh; i++) {\n const t = i / mesh;\n const h = config.interpFn(\n (1 - t) * config.range[0] + t * config.range[1]\n );\n const height = 20 * h;\n points.push([5 + (40 * i) / mesh, 20 - height]);\n }\n points.push([45, 20]);\n root.appendChild(\n svgfactory.path(points, fill, fill, linear_gradient)\n );\n } else if (config.type === 'gradient') {\n const num_decimal_digits = 2;\n const display_range = config.range.map(function(x) {\n const num_digit_multiplier = Math.pow(10, num_decimal_digits);\n return (\n Math.round(x * num_digit_multiplier) / num_digit_multiplier\n );\n });\n const gradient = svgfactory.gradient(config.colorFn);\n const gradient_id = gradient.getAttribute('id');\n target_defs.appendChild(gradient);\n root.appendChild(\n svgfactory.text(\n display_range[0].toString(),\n 0,\n 0,\n 12,\n 'Arial',\n 'normal'\n )\n );\n root.appendChild(\n svgfactory.text(\n display_range[1].toString(),\n 120,\n 0,\n 12,\n 'Arial',\n 'normal'\n )\n );\n root.appendChild(\n svgfactory.rect(30, 0, 60, 20, {\n type: 'gradientId',\n value: gradient_id,\n })\n );\n }\n return root;\n }\n\n public setWidth(w: number, model: OncoprintModel) {\n this.width = w;\n this.renderLegend(model);\n }\n public removeTrack(model: OncoprintModel) {\n this.renderLegend(model);\n }\n\n public addTracks(model: OncoprintModel) {\n this.renderLegend(model);\n }\n\n public setTrackData(model: OncoprintModel) {\n this.renderLegend(model);\n }\n\n public setTrackImportantIds(model: OncoprintModel) {\n this.renderLegend(model);\n }\n\n public shareRuleSet(model: OncoprintModel) {\n this.renderLegend(model);\n }\n\n public setRuleSet(model: OncoprintModel) {\n this.renderLegend(model);\n }\n\n public setTrackGroupLegendOrder(model: OncoprintModel) {\n this.renderLegend(model);\n }\n\n public hideTrackLegends(model: OncoprintModel) {\n this.renderLegend(model);\n }\n\n public showTrackLegends(model: OncoprintModel) {\n this.renderLegend(model);\n }\n\n public suppressRendering() {\n this.rendering_suppressed = true;\n }\n\n public releaseRendering(model: OncoprintModel) {\n this.rendering_suppressed = false;\n this.renderLegend(model);\n }\n\n public toSVGGroup(\n model: OncoprintModel,\n offset_x: number,\n offset_y: number\n ) {\n const root = svgfactory.group(offset_x || 0, offset_y || 0);\n this.$svg.append(root);\n this.renderLegend(model, root, true);\n root.parentNode.removeChild(root);\n return root;\n }\n}\n","import $ from 'jquery';\n\nconst TOOLTIP_CLASS = 'oncoprintjs__tooltip';\n\nexport type OncoprintTooltipParams = { noselect?: boolean };\n\nexport default class OncoprintToolTip {\n private $div: JQuery;\n private hide_timeout_id: number | undefined;\n private show_timeout_id: number | undefined;\n public center: boolean;\n private shown: boolean;\n\n constructor(private $container: JQuery, params?: OncoprintTooltipParams) {\n params = params || {};\n\n this.$div = $('<div></div>')\n .addClass(TOOLTIP_CLASS)\n .appendTo($container)\n .css({\n 'background-color': 'rgba(255,255,255,1)',\n position: 'absolute',\n display: 'none',\n border: '1px solid black',\n 'max-width': 300,\n 'min-width': 150,\n });\n if (params.noselect) {\n this.$div.addClass('noselect');\n }\n this.hide_timeout_id = undefined;\n this.show_timeout_id = undefined;\n this.center = false;\n\n this.shown = false;\n\n const self = this;\n this.$div.on('mousemove', function(evt) {\n evt.stopPropagation();\n self.cancelScheduledHide();\n });\n this.$div.on('mouseleave', function(evt) {\n evt.stopPropagation();\n self.hide();\n });\n }\n public show(\n wait: number | undefined,\n viewport_x: number,\n viewport_y: number,\n $contents: JQuery,\n fade?: boolean\n ) {\n this.cancelScheduledHide();\n\n if (typeof wait !== 'undefined' && !this.shown) {\n const self = this;\n this.cancelScheduledShow();\n this.show_timeout_id = setTimeout(function() {\n self.doShow(viewport_x, viewport_y, $contents, fade);\n }, wait) as any;\n } else {\n this.doShow(viewport_x, viewport_y, $contents, fade);\n }\n }\n private doShow(\n viewport_x: number,\n viewport_y: number,\n $contents: JQuery,\n fade?: boolean\n ) {\n this.cancelScheduledShow();\n this.show_timeout_id = undefined;\n this.$div.empty();\n this.$div.css({ top: 0, left: 0, 'z-index': 9999 }); // put up top left so that it doesnt cause any page expansion, before the position calculation which depends on page size\n this.$div.append($contents);\n if (!fade) {\n this.$div.show();\n } else {\n this.$div.stop().fadeIn('fast');\n }\n // adjust tooltip position based on size of contents\n let x = viewport_x - (this.center ? this.$div.width() / 2 : 0);\n let y = viewport_y - this.$div.height();\n // clamp to visible area\n const min_padding = 20;\n y = Math.max(y, min_padding); // make sure not too high\n y = Math.min(y, $(window).height() - this.$div.height()); // make sure not too low\n x = Math.max(x, min_padding); // make sure not too left\n x = Math.min(x, $(window).width() - this.$div.width() - min_padding); // make sure not too right\n\n this.$div.css({ top: y, left: x, 'z-index': 9999 });\n this.shown = true;\n }\n private doHide(fade?: boolean) {\n this.cancelScheduledHide();\n this.hide_timeout_id = undefined;\n if (!fade) {\n this.$div.hide();\n } else {\n this.$div.fadeOut();\n }\n this.shown = false;\n }\n private cancelScheduledShow() {\n clearTimeout(this.show_timeout_id);\n this.show_timeout_id = undefined;\n }\n private cancelScheduledHide() {\n clearTimeout(this.hide_timeout_id);\n this.hide_timeout_id = undefined;\n }\n public showIfNotAlreadyGoingTo(\n wait: number | undefined,\n viewport_x: number,\n viewport_y: number,\n $contents: JQuery\n ) {\n if (typeof this.show_timeout_id === 'undefined') {\n this.show(wait, viewport_x, viewport_y, $contents);\n }\n }\n public hideIfNotAlreadyGoingTo(wait?: number) {\n if (typeof this.hide_timeout_id === 'undefined') {\n this.hide(wait);\n }\n }\n public hide(wait?: number) {\n this.cancelScheduledShow();\n\n if (!this.shown) {\n return;\n }\n\n if (typeof wait !== 'undefined') {\n const self = this;\n this.cancelScheduledHide();\n this.hide_timeout_id = setTimeout(function() {\n self.doHide();\n }, wait) as any;\n } else {\n this.doHide();\n }\n }\n public fadeIn(\n wait: number | undefined,\n viewport_x: number,\n viewport_y: number,\n $contents: JQuery\n ) {\n this.show(wait, viewport_x, viewport_y, $contents, true);\n }\n}\n","import svgfactory from './svgfactory';\nimport $ from 'jquery';\nimport OncoprintToolTip from './oncoprinttooltip';\nimport OncoprintModel from './oncoprintmodel';\n\nexport default class OncoprintTrackInfoView {\n private $ctr: JQuery;\n private $text_ctr: JQuery;\n private base_font_size = 12;\n private font_family = 'Arial';\n private font_weight = 'bold';\n private width = 0;\n private $label_elts: JQuery[] = [];\n private rendering_suppressed = false;\n private minimum_track_height: number;\n\n constructor(private $div: JQuery, private tooltip: OncoprintToolTip) {\n this.tooltip.center = false;\n\n this.$ctr = $('<div></div>')\n .css({\n position: 'absolute',\n 'overflow-y': 'hidden',\n 'overflow-x': 'hidden',\n })\n .appendTo(this.$div);\n this.$text_ctr = $('<div></div>')\n .css({ position: 'absolute' })\n .appendTo(this.$ctr);\n }\n\n private destroyLabelElts() {\n for (let i = 0; i < this.$label_elts.length; i++) {\n this.$label_elts[i].off('mousemove mouseleave');\n }\n this.$label_elts = [];\n }\n\n private renderAllInfo(model: OncoprintModel) {\n if (this.rendering_suppressed) {\n return;\n }\n this.$text_ctr.empty();\n this.destroyLabelElts();\n\n const tracks = model.getTracks();\n this.minimum_track_height = Number.POSITIVE_INFINITY;\n for (let i = 0; i < tracks.length; i++) {\n this.minimum_track_height = Math.min(\n this.minimum_track_height,\n model.getTrackHeight(tracks[i])\n );\n }\n\n this.width = 0;\n\n const label_tops = model.getLabelTops();\n this.scroll(model.getVertScroll());\n const font_size = this.getFontSize();\n\n const self = this;\n for (let j = 0; j < tracks.length; j++) {\n (function() {\n const i = j;\n const $new_label = $('<span>')\n .css({\n position: 'absolute',\n 'font-family': self.font_family,\n 'font-weight': self.font_weight,\n 'font-size': font_size,\n })\n .addClass('noselect');\n const text = model.getTrackInfo(tracks[i]);\n if (!text) {\n return;\n }\n $new_label.text(text);\n $new_label.appendTo(self.$text_ctr);\n self.$label_elts.push($new_label);\n setTimeout(function() {\n $new_label\n .on('mousemove', function() {\n const $tooltip_elt = model.$getTrackInfoTooltip(\n tracks[i]\n );\n if ($tooltip_elt) {\n const offset = $new_label[0].getBoundingClientRect();\n self.tooltip.fadeIn(\n 200,\n offset.left,\n offset.top,\n $tooltip_elt\n );\n }\n })\n .on('mouseleave', function() {\n self.tooltip.hideIfNotAlreadyGoingTo(150);\n });\n }, 0); // delay to give time for render before adding events\n const top =\n label_tops[tracks[i]] +\n (model.getCellHeight(tracks[i]) -\n $new_label.outerHeight()) /\n 2;\n $new_label.css({ top: top + 'px' });\n self.width = Math.max(\n 32,\n self.width,\n $new_label[0].clientWidth\n );\n })();\n }\n if (this.width > 0) {\n this.width += 10;\n }\n }\n private scroll(scroll_y: number) {\n if (this.rendering_suppressed) {\n return;\n }\n this.$text_ctr.css({ top: -scroll_y });\n }\n\n private resize(model: OncoprintModel, getCellViewHeight: () => number) {\n if (this.rendering_suppressed) {\n return;\n }\n this.$div.css({ width: this.getWidth(), height: getCellViewHeight() });\n this.$ctr.css({ width: this.getWidth(), height: getCellViewHeight() });\n }\n\n public getFontSize() {\n return Math.max(\n Math.min(this.base_font_size, this.minimum_track_height),\n 7\n );\n }\n public getWidth() {\n return this.width;\n }\n public addTracks(model: OncoprintModel, getCellViewHeight: () => number) {\n this.renderAllInfo(model);\n this.resize(model, getCellViewHeight);\n }\n public moveTrack(model: OncoprintModel, getCellViewHeight: () => number) {\n this.renderAllInfo(model);\n this.resize(model, getCellViewHeight);\n }\n public setTrackGroupOrder(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.renderAllInfo(model);\n this.resize(model, getCellViewHeight);\n }\n public removeTrack(model: OncoprintModel, getCellViewHeight: () => number) {\n this.renderAllInfo(model);\n this.resize(model, getCellViewHeight);\n }\n public setTrackInfo(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.renderAllInfo(model);\n this.resize(model, getCellViewHeight);\n }\n public setTrackGroupHeader(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.renderAllInfo(model);\n this.resize(model, getCellViewHeight);\n }\n public setScroll(model: OncoprintModel) {\n this.setVertScroll(model);\n }\n public setHorzScroll(model: OncoprintModel) {}\n public setVertScroll(model: OncoprintModel) {\n this.scroll(model.getVertScroll());\n }\n public setZoom(model: OncoprintModel, getCellViewHeight: () => number) {\n this.setVertZoom(model, getCellViewHeight);\n }\n\n public setViewport(model: OncoprintModel, getCellViewHeight: () => number) {\n this.renderAllInfo(model);\n this.resize(model, getCellViewHeight);\n this.scroll(model.getVertScroll());\n }\n public setVertZoom(model: OncoprintModel, getCellViewHeight: () => number) {\n this.renderAllInfo(model);\n this.resize(model, getCellViewHeight);\n }\n public suppressRendering() {\n this.rendering_suppressed = true;\n }\n public releaseRendering(\n model: OncoprintModel,\n getCellViewHeight: () => number\n ) {\n this.rendering_suppressed = false;\n this.renderAllInfo(model);\n this.resize(model, getCellViewHeight);\n this.scroll(model.getVertScroll());\n }\n public destroy() {\n this.destroyLabelElts();\n }\n public toSVGGroup(\n model: OncoprintModel,\n offset_x: number,\n offset_y: number\n ) {\n const root = svgfactory.group(offset_x || 0, offset_y || 0);\n const cell_tops = model.getCellTops();\n const tracks = model.getTracks();\n\n const font_size = this.getFontSize();\n\n for (let i = 0; i < tracks.length; i++) {\n const track_id = tracks[i];\n const y = cell_tops[track_id] + model.getCellHeight(track_id) / 2;\n const info = model.getTrackInfo(track_id);\n const text_elt = svgfactory.text(\n info,\n 0,\n y,\n font_size,\n this.font_family,\n this.font_weight,\n 'bottom'\n );\n text_elt.setAttribute('dy', '0.35em');\n root.appendChild(text_elt);\n }\n return root;\n }\n}\n","import $ from 'jquery';\nimport MouseMoveEvent = JQuery.MouseMoveEvent;\nimport MouseDownEvent = JQuery.MouseDownEvent;\n\nconst VERTICAL = 'v';\nconst HORIZONTAL = 'h';\n\nfunction clamp(x: number) {\n return Math.max(Math.min(x, 1), 0);\n}\n\nexport type OncoprintZoomSliderParams = {\n btn_size: number;\n horizontal?: boolean;\n width?: number;\n\n vertical?: boolean; // either horizontal and width, or vertical and height, must be set\n height?: number;\n\n init_val: number;\n left: number;\n top: number;\n onChange: (val: number) => void;\n};\n\nexport default class OncoprintZoomSlider {\n private $div: JQuery;\n private onChange: OncoprintZoomSliderParams['onChange'];\n private value: number;\n private slider_bar_size: number;\n private orientation: 'v' | 'h';\n private $slider: JQuery;\n private $plus_btn: JQuery;\n private $minus_btn: JQuery;\n\n constructor(\n $container: JQuery,\n params?: Partial<OncoprintZoomSliderParams>\n ) {\n this.$div = $('<div>')\n .css({\n position: 'absolute',\n top: params.top || 0,\n left: params.left || 0,\n })\n .appendTo($container);\n params = params || {};\n params.btn_size = params.btn_size || 13;\n this.onChange = params.onChange || function() {};\n\n this.initialize(params as OncoprintZoomSliderParams);\n\n this.value = params.init_val === undefined ? 0.5 : params.init_val;\n this.slider_bar_size =\n (this.orientation === VERTICAL ? params.height : params.width) -\n 2 * params.btn_size;\n this.updateSliderPos();\n }\n\n private initialize(params: OncoprintZoomSliderParams) {\n var $ctr = this.$div;\n var icon_size = Math.round(params.btn_size * 0.7);\n var icon_padding = Math.round((params.btn_size - icon_size) / 2);\n var $slider_bar = $('<div>')\n .css({\n position: 'absolute',\n 'background-color': '#ffffff',\n outline: 'solid 1px black',\n })\n .appendTo($ctr);\n var $slider = $('<div>')\n .css({\n position: 'absolute',\n 'background-color': '#ffffff',\n border: 'solid 1px black',\n 'border-radius': '3px',\n cursor: 'pointer',\n })\n .appendTo($ctr);\n\n var $plus_btn = $('<div>')\n .css({\n position: 'absolute',\n 'min-height': params.btn_size,\n 'min-width': params.btn_size,\n 'background-color': '#ffffff',\n border: 'solid 1px black',\n 'border-radius': '3px',\n cursor: 'pointer',\n })\n .appendTo($ctr);\n $('<span>')\n .addClass('icon fa fa-plus')\n .css({\n position: 'absolute',\n top: icon_padding,\n left: icon_padding,\n 'min-width': icon_size,\n 'min-height': icon_size,\n })\n .appendTo($plus_btn);\n var $minus_btn = $('<div>')\n .css({\n position: 'absolute',\n 'min-height': params.btn_size,\n 'min-width': params.btn_size,\n 'background-color': '#ffffff',\n border: 'solid 1px black',\n 'border-radius': '3px',\n cursor: 'pointer',\n })\n .appendTo($ctr);\n $('<span>')\n .addClass('icon fa fa-minus')\n .css({\n position: 'absolute',\n top: icon_padding,\n left: icon_padding,\n 'min-width': icon_size,\n 'min-height': icon_size,\n })\n .appendTo($minus_btn);\n if (params.vertical) {\n $slider_bar.css({\n 'min-height': params.height - 2 * params.btn_size,\n 'min-width': Math.round(params.btn_size / 5),\n });\n $slider.css({\n 'min-height': Math.round(params.btn_size / 2),\n 'min-width': params.btn_size,\n });\n\n $plus_btn.css({ top: 0, left: 0 });\n $minus_btn.css({ top: params.height - params.btn_size, left: 0 });\n $slider_bar.css({\n top: params.btn_size,\n left: 0.4 * params.btn_size,\n });\n $slider.css({ left: 0 });\n this.orientation = VERTICAL;\n } else {\n $slider_bar.css({\n 'min-height': Math.round(params.btn_size / 5),\n 'min-width': params.width - 2 * params.btn_size,\n });\n $slider.css({\n 'min-height': params.btn_size,\n 'min-width': Math.round(params.btn_size / 2),\n });\n\n $plus_btn.css({ top: 0, left: params.width - params.btn_size });\n $minus_btn.css({ top: 0, left: 0 });\n $slider_bar.css({\n top: 0.4 * params.btn_size,\n left: params.btn_size,\n });\n $slider.css({ top: 0 });\n this.orientation = HORIZONTAL;\n }\n\n const self = this;\n\n $plus_btn.click(function() {\n self.value /= 0.7;\n params.onChange(self.value);\n });\n $minus_btn.click(function() {\n self.value *= 0.7;\n params.onChange(self.value);\n });\n\n [$slider, $plus_btn, $minus_btn].map(function($btn) {\n $btn.hover(\n function() {\n $(this).css({ 'background-color': '#cccccc' });\n },\n function() {\n $(this).css({ 'background-color': '#ffffff' });\n }\n );\n });\n\n this.$slider = $slider;\n this.$plus_btn = $plus_btn;\n this.$minus_btn = $minus_btn;\n\n (function setUpSliderDrag() {\n let start_mouse: number;\n let start_val: number;\n let dragging: boolean;\n function handleSliderDrag(evt: MouseMoveEvent) {\n evt.stopPropagation();\n evt.preventDefault();\n let delta_mouse;\n if (self.orientation === VERTICAL) {\n delta_mouse = start_mouse - evt.pageY; // vertical zoom, positive is up, but CSS positive is down, so we need to invert\n } else {\n delta_mouse = evt.pageX - start_mouse;\n }\n const delta_val = delta_mouse / self.slider_bar_size;\n self.setSliderValue(start_val + delta_val);\n }\n function stopSliderDrag() {\n if (dragging && start_val !== self.value) {\n self.onChange(self.value);\n }\n dragging = false;\n }\n self.$slider.on('mousedown', function(evt: MouseDownEvent) {\n if (self.orientation === VERTICAL) {\n start_mouse = evt.pageY;\n } else {\n start_mouse = evt.pageX;\n }\n start_val = self.value;\n dragging = true;\n $(document).on('mousemove', handleSliderDrag);\n });\n $(document).on('mouseup click', function() {\n $(document).off('mousemove', handleSliderDrag);\n stopSliderDrag();\n });\n })();\n }\n\n private updateSliderPos() {\n const proportion = this.value;\n var $slider = this.$slider;\n var bounds = this.getSliderBounds();\n if (this.orientation === VERTICAL) {\n $slider.css(\n 'top',\n bounds.bottom * (1 - proportion) + bounds.top * proportion\n );\n } else if (this.orientation === HORIZONTAL) {\n $slider.css(\n 'left',\n bounds.left * (1 - proportion) + bounds.right * proportion\n );\n }\n }\n\n private getSliderBounds() {\n if (this.orientation === VERTICAL) {\n return {\n bottom:\n parseInt(this.$minus_btn.css('top'), 10) -\n parseInt(this.$slider.css('min-height'), 10),\n top:\n parseInt(this.$plus_btn.css('top'), 10) +\n parseInt(this.$plus_btn.css('min-height'), 10),\n };\n } else {\n return {\n left:\n parseInt(this.$minus_btn.css('left'), 10) +\n parseInt(this.$minus_btn.css('min-width'), 10),\n right:\n parseInt(this.$plus_btn.css('left'), 10) -\n parseInt(this.$slider.css('min-width'), 10),\n };\n }\n }\n\n public setSliderValue(proportion: number) {\n this.value = clamp(proportion);\n this.updateSliderPos();\n }\n}\n","var img = \"data:image/svg+xml,%3c%3fxml version='1.0' encoding='utf-8'%3f%3e%3c!-- Generator: Adobe Illustrator 16.0.4%2c SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3e%3c!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='20px' height='20px' viewBox='0 0 20 20' enable-background='new 0 0 20 20' xml:space='preserve'%3e%3cline fill='none' x1='6.792' y1='5.667' x2='6.792' y2='12.125'/%3e%3cpolygon fill='black' points='0%2c5 0%2c0 5%2c0 '/%3e%3cpolygon fill='black' points='14.999%2c0 20%2c0 20%2c5 '/%3e%3cpolygon fill='black' points='20%2c15 20%2c20 15%2c20 '/%3e%3cpolygon fill='black' points='5%2c20 0%2c20 0%2c15 '/%3e%3crect x='3.75' y='4.708' fill='none' stroke='black' stroke-width='2' stroke-miterlimit='10' width='12.5' height='10.583'/%3e%3c/svg%3e\";\n export default img;","import gl_matrix from 'gl-matrix';\nimport OncoprintZoomSlider from './oncoprintzoomslider';\nimport $ from 'jquery';\nimport zoomToFitIcon from '../img/zoomtofit.svg';\nimport OncoprintModel, { ColumnIndex, TrackId } from './oncoprintmodel';\nimport OncoprintWebGLCellView, {\n OncoprintShaderProgram,\n OncoprintTrackBuffer,\n OncoprintVertexTrackBuffer,\n OncoprintWebGLContext,\n} from './oncoprintwebglcellview';\nimport MouseMoveEvent = JQuery.MouseMoveEvent;\nimport { clamp, cloneShallow } from './utils';\nimport _ from 'lodash';\n\nexport type MinimapViewportSpec = {\n left_col: ColumnIndex; // leftmost col included in viewport\n right_col: ColumnIndex; // col at the boundary of viewport, first col to the right of viewport\n scroll_y_proportion: number; // between 0 and 1\n zoom_y: number; // between 0 and 1\n};\n\ntype OverlayRectParams = {\n top: number;\n left_col: ColumnIndex;\n right_col: ColumnIndex;\n height: number;\n};\n\nclass OverlayRectSpec {\n constructor(\n private params: OverlayRectParams,\n private getCellWidth: () => number\n ) {}\n\n public setParams(p: OverlayRectParams) {\n this.params = p;\n }\n\n public clone() {\n return new OverlayRectSpec(\n cloneShallow(this.params),\n this.getCellWidth\n );\n }\n\n public get left_col() {\n return this.params.left_col;\n }\n\n public get right_col() {\n return this.params.right_col;\n }\n\n public get top() {\n return this.params.top;\n }\n\n public get height() {\n return this.params.height;\n }\n\n public get num_cols() {\n return this.right_col - this.left_col;\n }\n\n public get left() {\n return this.left_col * this.getCellWidth();\n }\n\n public get right() {\n return this.right_col * this.getCellWidth();\n }\n\n public get width() {\n return this.right - this.left;\n }\n}\n\nexport default class OncoprintMinimapView {\n private handleContextLost: () => void;\n private layout_numbers = {\n window_width: -1,\n window_height: -1,\n vertical_zoom_area_width: -1,\n horizontal_zoom_area_height: -1,\n padding: -1,\n window_bar_height: -1,\n canvas_left: -1,\n canvas_top: -1,\n };\n private current_rect: OverlayRectSpec;\n\n private $window_bar: JQuery;\n private $close_btn: JQuery;\n private horizontal_zoom: OncoprintZoomSlider;\n private vertical_zoom: OncoprintZoomSlider;\n\n private ctx: OncoprintWebGLContext | null;\n private ext: ANGLE_instanced_arrays | null;\n private overlay_ctx: CanvasRenderingContext2D | null;\n private pMatrix: any;\n private mvMatrix: any;\n private shader_program: OncoprintShaderProgram;\n\n private resize_hover:\n | 'r'\n | 'l'\n | 't'\n | 'b'\n | 'tl'\n | 'br'\n | 'bl'\n | 'tr'\n | false = false;\n\n private rendering_suppressed = false;\n private visible = false;\n\n constructor(\n private $div: JQuery,\n private $canvas: JQuery<HTMLCanvasElement>,\n private $overlay_canvas: JQuery<HTMLCanvasElement>,\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView,\n width: number,\n height: number,\n drag_callback: (x: number, y: number) => void,\n viewport_callback: (vp: MinimapViewportSpec) => void,\n horz_zoom_callback: (z: number) => void,\n vert_zoom_callback: (z: number) => void,\n zoom_to_fit_callback: () => void,\n close_callback: () => void\n ) {\n this.$div = $div;\n this.$canvas = $canvas;\n this.$overlay_canvas = $overlay_canvas;\n\n this.current_rect = new OverlayRectSpec(\n { top: 0, left_col: 0, right_col: 0, height: 0 },\n () => model.getCellWidth(true) * this.getZoom(model).x\n );\n\n const self = this;\n const padding = 4;\n const vertical_zoom_area_width = 20;\n const horizontal_zoom_area_height = 20;\n const window_bar_height = 20;\n\n this.handleContextLost = function() {\n // catch when context lost and refresh it\n // eg if cell view uses a ton of contexts, then browser clears oldest context,\n //\tthen the minimap would be empty until we refresh the context and rerender\n self.drawOncoprintAndOverlayRect(model, cell_view);\n }.bind(this);\n\n this.$canvas[0].addEventListener(\n 'webglcontextlost',\n this.handleContextLost\n );\n\n this.layout_numbers = {\n window_width: padding + width + padding + vertical_zoom_area_width,\n window_height:\n window_bar_height +\n padding +\n height +\n padding +\n horizontal_zoom_area_height,\n vertical_zoom_area_width: vertical_zoom_area_width,\n horizontal_zoom_area_height: horizontal_zoom_area_height,\n padding: padding,\n window_bar_height: window_bar_height,\n canvas_left: padding,\n canvas_top: window_bar_height + padding,\n };\n\n this.$div.css({\n 'min-width': this.layout_numbers.window_width,\n 'min-height': this.layout_numbers.window_height,\n outline: 'solid 1px black',\n 'background-color': '#ffffff',\n });\n\n this.$window_bar = $('<div>')\n .css({\n position: 'absolute',\n 'min-width': this.layout_numbers.window_width,\n 'min-height': this.layout_numbers.window_bar_height,\n 'background-color': '#cccccc',\n })\n .appendTo(this.$div);\n\n this.$close_btn = $('<div>')\n .css({\n position: 'absolute',\n top: 3,\n left: 3,\n 'min-width': this.layout_numbers.window_bar_height - 6,\n 'min-height': this.layout_numbers.window_bar_height - 6,\n cursor: 'pointer',\n })\n .appendTo(this.$div);\n $('<span>')\n .addClass('icon fa fa-times-circle')\n .css('font-size', this.layout_numbers.window_bar_height - 6 + 'px')\n .appendTo(this.$close_btn);\n\n this.$close_btn.click(close_callback || function() {});\n\n this.$canvas[0].width = width;\n this.$canvas[0].height = height;\n this.$canvas.css({\n top: this.layout_numbers.canvas_top,\n left: this.layout_numbers.canvas_left,\n });\n this.$overlay_canvas[0].width = width;\n this.$overlay_canvas[0].height = width;\n this.$overlay_canvas.css({\n top: this.layout_numbers.canvas_top,\n left: this.layout_numbers.canvas_left,\n outline: 'solid 1px #444444',\n });\n\n this.horizontal_zoom = new OncoprintZoomSlider(this.$div, {\n btn_size: this.layout_numbers.horizontal_zoom_area_height - padding,\n horizontal: true,\n width: width,\n init_val: model.getHorzZoom(),\n left: padding,\n top: this.layout_numbers.canvas_top + height + padding,\n onChange: function(val) {\n horz_zoom_callback(val);\n },\n });\n this.vertical_zoom = new OncoprintZoomSlider(this.$div, {\n btn_size: this.layout_numbers.vertical_zoom_area_width - padding,\n vertical: true,\n height: height,\n init_val: model.getVertZoom(),\n left: this.layout_numbers.canvas_left + width + padding,\n top: this.layout_numbers.window_bar_height + padding,\n onChange: function(val) {\n vert_zoom_callback(val);\n },\n });\n\n (function setUpZoomToFitButton() {\n const btn_height =\n self.layout_numbers.horizontal_zoom_area_height - padding;\n const btn_width =\n self.layout_numbers.vertical_zoom_area_width - padding;\n const $btn = $('<div>')\n .css({\n position: 'absolute',\n height: btn_height,\n width: btn_width,\n outline: 'solid 1px black',\n left: self.layout_numbers.canvas_left + width + padding,\n top: self.layout_numbers.canvas_top + height + padding,\n cursor: 'pointer',\n })\n .addClass('oncoprint-zoomtofit-btn')\n .appendTo($div);\n $(`<img src=\"${zoomToFitIcon}\" />`)\n .css({\n height: btn_height - 4,\n width: btn_width - 4,\n 'margin-top': -6,\n 'margin-left': 2,\n })\n .appendTo($btn);\n $btn.hover(\n function() {\n $(this).css({ 'background-color': '#cccccc' });\n },\n function() {\n $(this).css({ 'background-color': '#ffffff' });\n }\n );\n\n zoom_to_fit_callback = zoom_to_fit_callback || function() {};\n $btn.click(zoom_to_fit_callback);\n })();\n this.getWebGLContextAndSetUpMatrices();\n this.setUpShaders();\n this.overlay_ctx = $overlay_canvas[0].getContext('2d');\n\n // Set up dragging\n const resize_hit_zone = 5;\n function mouseInRectDragZone(x: number, y: number) {\n return (\n x >= self.current_rect.left + resize_hit_zone &&\n x <=\n self.current_rect.left +\n self.current_rect.width -\n resize_hit_zone &&\n y >= self.current_rect.top + resize_hit_zone &&\n y <=\n self.current_rect.top +\n self.current_rect.height -\n resize_hit_zone\n );\n }\n\n function mouseInsideRectHitZone(x: number, y: number) {\n return (\n x >= self.current_rect.left - resize_hit_zone &&\n x <=\n self.current_rect.left +\n self.current_rect.width +\n resize_hit_zone &&\n y >= self.current_rect.top - resize_hit_zone &&\n y <=\n self.current_rect.top +\n self.current_rect.height +\n resize_hit_zone\n );\n }\n\n function mouseInRightHorzResizeZone(x: number, y: number) {\n return (\n !mouseInTopLeftResizeZone(x, y) &&\n !mouseInTopRightResizeZone(x, y) &&\n !mouseInBottomLeftResizeZone(x, y) &&\n !mouseInBottomRightResizeZone(x, y) &&\n mouseInsideRectHitZone(x, y) &&\n Math.abs(\n x - (self.current_rect.left + self.current_rect.width)\n ) < resize_hit_zone\n );\n }\n\n function mouseInLeftHorzResizeZone(x: number, y: number) {\n return (\n !mouseInTopLeftResizeZone(x, y) &&\n !mouseInTopRightResizeZone(x, y) &&\n !mouseInBottomLeftResizeZone(x, y) &&\n !mouseInBottomRightResizeZone(x, y) &&\n mouseInsideRectHitZone(x, y) &&\n Math.abs(x - self.current_rect.left) < resize_hit_zone\n );\n }\n\n function mouseInTopVertResizeZone(x: number, y: number) {\n return (\n !mouseInTopLeftResizeZone(x, y) &&\n !mouseInTopRightResizeZone(x, y) &&\n !mouseInBottomLeftResizeZone(x, y) &&\n !mouseInBottomRightResizeZone(x, y) &&\n mouseInsideRectHitZone(x, y) &&\n Math.abs(y - self.current_rect.top) < resize_hit_zone\n );\n }\n\n function mouseInBottomVertResizeZone(x: number, y: number) {\n return (\n !mouseInTopLeftResizeZone(x, y) &&\n !mouseInTopRightResizeZone(x, y) &&\n !mouseInBottomLeftResizeZone(x, y) &&\n !mouseInBottomRightResizeZone(x, y) &&\n mouseInsideRectHitZone(x, y) &&\n Math.abs(\n y - (self.current_rect.top + self.current_rect.height)\n ) < resize_hit_zone\n );\n }\n\n function mouseInTopLeftResizeZone(x: number, y: number) {\n return (\n Math.abs(y - self.current_rect.top) < resize_hit_zone &&\n Math.abs(x - self.current_rect.left) < resize_hit_zone\n );\n }\n\n function mouseInBottomLeftResizeZone(x: number, y: number) {\n return (\n Math.abs(\n y - (self.current_rect.top + self.current_rect.height)\n ) < resize_hit_zone &&\n Math.abs(x - self.current_rect.left) < resize_hit_zone\n );\n }\n\n function mouseInTopRightResizeZone(x: number, y: number) {\n return (\n Math.abs(y - self.current_rect.top) < resize_hit_zone &&\n Math.abs(\n x - (self.current_rect.left + self.current_rect.width)\n ) < resize_hit_zone\n );\n }\n\n function mouseInBottomRightResizeZone(x: number, y: number) {\n return (\n Math.abs(\n y - (self.current_rect.top + self.current_rect.height)\n ) < resize_hit_zone &&\n Math.abs(\n x - (self.current_rect.left + self.current_rect.width)\n ) < resize_hit_zone\n );\n }\n\n function updateRectResizeHoverLocation(x?: number, y?: number) {\n if (typeof x === 'undefined') {\n self.resize_hover = false;\n } else {\n if (mouseInRightHorzResizeZone(x, y)) {\n self.resize_hover = 'r';\n } else if (mouseInLeftHorzResizeZone(x, y)) {\n self.resize_hover = 'l';\n } else if (mouseInTopVertResizeZone(x, y)) {\n self.resize_hover = 't';\n } else if (mouseInBottomVertResizeZone(x, y)) {\n self.resize_hover = 'b';\n } else if (mouseInTopLeftResizeZone(x, y)) {\n self.resize_hover = 'tl';\n } else if (mouseInBottomRightResizeZone(x, y)) {\n self.resize_hover = 'br';\n } else if (mouseInBottomLeftResizeZone(x, y)) {\n self.resize_hover = 'bl';\n } else if (mouseInTopRightResizeZone(x, y)) {\n self.resize_hover = 'tr';\n } else {\n self.resize_hover = false;\n }\n }\n }\n\n function updateCSSCursor(x?: number, y?: number) {\n let cursor_val;\n if (typeof x === 'undefined') {\n cursor_val = 'auto';\n } else {\n if (mouseInRectDragZone(x, y)) {\n cursor_val = 'move';\n } else if (\n mouseInRightHorzResizeZone(x, y) ||\n mouseInLeftHorzResizeZone(x, y)\n ) {\n cursor_val = 'ew-resize';\n } else if (\n mouseInTopVertResizeZone(x, y) ||\n mouseInBottomVertResizeZone(x, y)\n ) {\n cursor_val = 'ns-resize';\n } else if (\n mouseInTopLeftResizeZone(x, y) ||\n mouseInBottomRightResizeZone(x, y)\n ) {\n cursor_val = 'nwse-resize';\n } else if (\n mouseInBottomLeftResizeZone(x, y) ||\n mouseInTopRightResizeZone(x, y)\n ) {\n cursor_val = 'nesw-resize';\n } else {\n cursor_val = 'auto';\n }\n }\n $div.css('cursor', cursor_val);\n }\n\n function getCanvasMouse(\n view: OncoprintMinimapView,\n div_mouse_x: number,\n div_mouse_y: number\n ) {\n const canv_top = parseInt(view.$canvas[0].style.top, 10);\n const canv_left = parseInt(view.$canvas[0].style.left, 10);\n const canv_width = parseInt(view.$canvas[0].width as any, 10);\n const canv_height = parseInt(view.$canvas[0].height as any, 10);\n\n const mouse_x = div_mouse_x - canv_left;\n const mouse_y = div_mouse_y - canv_top;\n\n const outside =\n mouse_x < 0 ||\n mouse_x >= canv_width ||\n mouse_y < 0 ||\n mouse_y >= canv_height;\n\n return { mouse_x: mouse_x, mouse_y: mouse_y, outside: outside };\n }\n\n let dragging = false;\n let drag_type:\n | 'move'\n | 'resize_r'\n | 'resize_l'\n | 'resize_b'\n | 'resize_t'\n | 'resize_tr'\n | 'resize_br'\n | 'resize_tl'\n | 'resize_bl'\n | false = false;\n let drag_start_col = -1;\n let drag_start_vert_scroll = -1;\n let drag_start_x = -1;\n let drag_start_y = -1;\n let drag_start_vert_zoom = -1;\n let y_ratio = -1;\n let drag_start_rect: OverlayRectSpec;\n\n $(document).on('mousedown', function(evt) {\n const offset = self.$div.offset();\n const overlay_mouse_x = evt.pageX - offset.left;\n const overlay_mouse_y = evt.pageY - offset.top;\n const mouse = getCanvasMouse(\n self,\n overlay_mouse_x,\n overlay_mouse_y\n );\n\n if (!mouse.outside) {\n const mouse_x = mouse.mouse_x;\n const mouse_y = mouse.mouse_y;\n dragging = false;\n drag_type = false;\n\n y_ratio =\n model.getOncoprintHeight() /\n parseInt(self.$canvas[0].height as any, 10);\n if (mouseInRectDragZone(mouse_x, mouse_y)) {\n drag_type = 'move';\n } else if (mouseInRightHorzResizeZone(mouse_x, mouse_y)) {\n drag_type = 'resize_r';\n } else if (mouseInLeftHorzResizeZone(mouse_x, mouse_y)) {\n drag_type = 'resize_l';\n } else if (mouseInTopVertResizeZone(mouse_x, mouse_y)) {\n drag_type = 'resize_t';\n } else if (mouseInBottomVertResizeZone(mouse_x, mouse_y)) {\n drag_type = 'resize_b';\n } else if (mouseInTopRightResizeZone(mouse_x, mouse_y)) {\n drag_type = 'resize_tr';\n } else if (mouseInBottomRightResizeZone(mouse_x, mouse_y)) {\n drag_type = 'resize_br';\n } else if (mouseInTopLeftResizeZone(mouse_x, mouse_y)) {\n drag_type = 'resize_tl';\n } else if (mouseInBottomLeftResizeZone(mouse_x, mouse_y)) {\n drag_type = 'resize_bl';\n }\n if (drag_type !== false) {\n dragging = true;\n drag_start_x = mouse_x;\n drag_start_y = mouse_y;\n drag_start_col = model.getClosestColumnIndexToLeft(\n model.getHorzScroll(),\n true\n );\n drag_start_vert_scroll = model.getVertScroll();\n drag_start_vert_zoom = model.getVertZoom();\n drag_start_rect = self.current_rect.clone();\n }\n }\n });\n $(document).on('mousemove', function(evt) {\n const offset = self.$div.offset();\n const overlay_mouse_x = evt.pageX - offset.left;\n const overlay_mouse_y = evt.pageY - offset.top;\n const mouse = getCanvasMouse(\n self,\n overlay_mouse_x,\n overlay_mouse_y\n );\n const mouse_x = mouse.mouse_x;\n const mouse_y = mouse.mouse_y;\n let zoom = self.getZoom(model);\n let cell_width = model.getCellWidth(true) * zoom.x;\n if (dragging) {\n evt.preventDefault();\n let delta_col =\n Math.floor(mouse_x / cell_width) -\n Math.floor(drag_start_x / cell_width);\n let delta_y = mouse_y - drag_start_y;\n if (drag_type === 'move') {\n const delta_y_scroll = delta_y * y_ratio;\n drag_callback(\n self.colToLeft(\n model,\n clamp(\n drag_start_col + delta_col,\n 0,\n model.getIdOrder().length - 1\n )\n ),\n drag_start_vert_scroll + delta_y_scroll\n );\n } else {\n let render_rect: OverlayRectParams;\n zoom = self.getZoom(model);\n const max_num_cols = model.getIdOrder().length;\n const min_num_cols = Math.ceil(\n cell_view.getVisibleAreaWidth() /\n (model.getCellWidth(true) +\n model.getCellPadding(true, true))\n );\n const max_height = model.getOncoprintHeight(true) * zoom.y;\n const min_height =\n cell_view.getVisibleAreaHeight(model) * zoom.y;\n const drag_start_right_col = drag_start_rect.right_col;\n const drag_start_bottom =\n drag_start_rect.top + drag_start_rect.height;\n if (drag_type === 'resize_r') {\n // Width must be valid\n delta_col = clamp(\n delta_col,\n min_num_cols - drag_start_rect.num_cols,\n max_num_cols - drag_start_rect.num_cols\n );\n // Right must be valid\n delta_col = Math.min(\n delta_col,\n max_num_cols - drag_start_right_col\n );\n render_rect = {\n top: drag_start_rect.top,\n left_col: drag_start_rect.left_col,\n right_col: drag_start_rect.right_col + delta_col,\n height: drag_start_rect.height,\n };\n } else if (drag_type === 'resize_l') {\n // Width must be valid\n delta_col = clamp(\n delta_col,\n drag_start_rect.num_cols - max_num_cols,\n drag_start_rect.num_cols - min_num_cols\n );\n // Left must be valid\n delta_col = Math.max(\n delta_col,\n -drag_start_rect.left_col\n );\n render_rect = {\n top: drag_start_rect.top,\n left_col: drag_start_rect.left_col + delta_col,\n right_col: drag_start_rect.right_col,\n height: drag_start_rect.height,\n };\n } else if (drag_type === 'resize_t') {\n // Height must be valid\n delta_y = clamp(\n delta_y,\n drag_start_rect.height - max_height,\n drag_start_rect.height - min_height\n );\n // Top must be valid\n delta_y = Math.max(delta_y, -drag_start_rect.top);\n render_rect = {\n top: drag_start_rect.top + delta_y,\n left_col: drag_start_rect.left_col,\n right_col: drag_start_rect.right_col,\n height: drag_start_rect.height - delta_y,\n };\n } else if (drag_type === 'resize_b') {\n // Height must be valid\n delta_y = clamp(\n delta_y,\n min_height - drag_start_rect.height,\n max_height - drag_start_rect.height\n );\n // Bottom must be valid\n delta_y = Math.min(\n delta_y,\n max_height - drag_start_bottom\n );\n render_rect = {\n top: drag_start_rect.top,\n left_col: drag_start_rect.left_col,\n right_col: drag_start_rect.right_col,\n height: drag_start_rect.height + delta_y,\n };\n } else if (drag_type === 'resize_tr') {\n // Width must be valid\n delta_col = clamp(\n delta_col,\n min_num_cols - drag_start_rect.num_cols,\n max_num_cols - drag_start_rect.num_cols\n );\n // Right must be valid\n delta_col = Math.min(\n delta_col,\n max_num_cols - drag_start_right_col\n );\n // Height must be valid\n delta_y = clamp(\n delta_y,\n drag_start_rect.height - max_height,\n drag_start_rect.height - min_height\n );\n // Top must be valid\n delta_y = Math.max(delta_y, -drag_start_rect.top);\n render_rect = {\n top: drag_start_rect.top + delta_y,\n left_col: drag_start_rect.left_col,\n right_col: drag_start_rect.right_col + delta_col,\n height: drag_start_rect.height - delta_y,\n };\n } else if (drag_type === 'resize_tl') {\n // Width must be valid\n delta_col = clamp(\n delta_col,\n drag_start_rect.num_cols - max_num_cols,\n drag_start_rect.num_cols - min_num_cols\n );\n // Left must be valid\n delta_col = Math.max(\n delta_col,\n -drag_start_rect.left_col\n );\n // Height must be valid\n delta_y = clamp(\n delta_y,\n drag_start_rect.height - max_height,\n drag_start_rect.height - min_height\n );\n // Top must be valid\n delta_y = Math.max(delta_y, -drag_start_rect.top);\n render_rect = {\n top: drag_start_rect.top + delta_y,\n left_col: drag_start_rect.left_col + delta_col,\n right_col: drag_start_rect.right_col,\n height: drag_start_rect.height - delta_y,\n };\n } else if (drag_type === 'resize_br') {\n // Height must be valid\n delta_y = clamp(\n delta_y,\n min_height - drag_start_rect.height,\n max_height - drag_start_rect.height\n );\n // Bottom must be valid\n delta_y = Math.min(\n delta_y,\n max_height - drag_start_bottom\n );\n // Width must be valid\n delta_col = clamp(\n delta_col,\n min_num_cols - drag_start_rect.num_cols,\n max_num_cols - drag_start_rect.num_cols\n );\n // Right must be valid\n delta_col = Math.min(\n delta_col,\n max_num_cols - drag_start_right_col\n );\n render_rect = {\n top: drag_start_rect.top,\n left_col: drag_start_rect.left_col,\n right_col: drag_start_rect.right_col + delta_col,\n height: drag_start_rect.height + delta_y,\n };\n } else if (drag_type === 'resize_bl') {\n // Height must be valid\n delta_y = clamp(\n delta_y,\n min_height - drag_start_rect.height,\n max_height - drag_start_rect.height\n );\n // Bottom must be valid\n delta_y = Math.min(\n delta_y,\n max_height - drag_start_bottom\n );\n // Width must be valid\n delta_col = clamp(\n delta_col,\n drag_start_rect.num_cols - max_num_cols,\n drag_start_rect.num_cols - min_num_cols\n );\n // Left must be valid\n delta_col = Math.max(\n delta_col,\n -drag_start_rect.left_col\n );\n render_rect = {\n top: drag_start_rect.top,\n left_col: drag_start_rect.left_col + delta_col,\n right_col: drag_start_rect.right_col,\n height: drag_start_rect.height + delta_y,\n };\n }\n self.current_rect.setParams(render_rect);\n self.drawOverlayRect(null, null, self.current_rect);\n }\n } else {\n if (mouse.outside) {\n updateCSSCursor();\n updateRectResizeHoverLocation();\n } else {\n updateCSSCursor(mouse_x, mouse_y);\n updateRectResizeHoverLocation(mouse_x, mouse_y);\n }\n self.drawOverlayRect(model, cell_view);\n }\n });\n\n function endDrag() {\n if (dragging) {\n if (\n [\n 'resize_t',\n 'resize_b',\n 'resize_l',\n 'resize_r',\n 'resize_tl',\n 'resize_tr',\n 'resize_bl',\n 'resize_br',\n ].indexOf(drag_type as any) > -1\n ) {\n viewport_callback({\n left_col: self.current_rect.left_col,\n scroll_y_proportion:\n self.current_rect.top /\n parseInt(self.$canvas[0].height as any, 10),\n right_col: self.current_rect.right_col,\n zoom_y:\n (drag_start_rect.height /\n self.current_rect.height) *\n drag_start_vert_zoom,\n });\n }\n dragging = false;\n drag_type = false;\n }\n }\n\n $(document).on('mouseup', function(evt) {\n const offset = self.$div.offset();\n const overlay_mouse_x = evt.pageX - offset.left;\n const overlay_mouse_y = evt.pageY - offset.top;\n endDrag();\n const mouse = getCanvasMouse(\n self,\n overlay_mouse_x,\n overlay_mouse_y\n );\n if (!mouse.outside) {\n let mouse_x = mouse.mouse_x;\n let mouse_y = mouse.mouse_y;\n updateCSSCursor(mouse_x, mouse_y);\n updateRectResizeHoverLocation(mouse_x, mouse_y);\n } else {\n updateCSSCursor();\n updateRectResizeHoverLocation();\n }\n self.drawOverlayRect(model, cell_view);\n });\n\n (function setUpWindowDrag() {\n let start_mouse_x = 0;\n let start_mouse_y = 0;\n let start_left = 0;\n let start_top = 0;\n function handleDrag(evt: MouseMoveEvent) {\n evt.preventDefault();\n const delta_mouse_x = evt.pageX - start_mouse_x;\n const delta_mouse_y = evt.pageY - start_mouse_y;\n self.setWindowPosition(\n start_left + delta_mouse_x,\n start_top + delta_mouse_y\n );\n }\n self.$window_bar.hover(\n function() {\n $(this).css({ cursor: 'move' });\n },\n function() {\n $(this).css({ cursor: 'auto' });\n }\n );\n\n self.$window_bar.on('mousedown', function(evt) {\n start_mouse_x = evt.pageX;\n start_mouse_y = evt.pageY;\n start_left = parseInt(self.$div.css('left'), 10);\n start_top = parseInt(self.$div.css('top'), 10);\n $(document).on('mousemove', handleDrag);\n });\n $(document).on('mouseup click', function() {\n $(document).off('mousemove', handleDrag);\n });\n })();\n }\n\n private colToLeft(model: OncoprintModel, colIndex: number) {\n return model.getZoomedColumnLeft(model.getIdOrder()[colIndex]);\n }\n\n private get shouldRender() {\n return this.visible && !this.rendering_suppressed;\n }\n\n private getNewCanvas() {\n const old_canvas = this.$canvas[0];\n old_canvas.removeEventListener(\n 'webglcontextlost',\n this.handleContextLost\n );\n const new_canvas = old_canvas.cloneNode();\n new_canvas.addEventListener('webglcontextlost', this.handleContextLost);\n const parent_node = old_canvas.parentNode;\n parent_node.removeChild(old_canvas);\n parent_node.insertBefore(new_canvas, this.$overlay_canvas[0]);\n this.$canvas = $(new_canvas) as JQuery<HTMLCanvasElement>;\n this.ctx = null;\n this.ext = null;\n }\n\n private getWebGLCanvasContext() {\n try {\n const canvas = this.$canvas[0];\n const ctx =\n this.ctx ||\n (canvas.getContext('experimental-webgl', {\n alpha: false,\n antialias: true,\n }) as OncoprintWebGLContext);\n ctx.clearColor(1.0, 1.0, 1.0, 1.0);\n ctx.clear(ctx.COLOR_BUFFER_BIT | ctx.DEPTH_BUFFER_BIT);\n ctx.viewportWidth = canvas.width;\n ctx.viewportHeight = canvas.height;\n ctx.viewport(0, 0, ctx.viewportWidth, ctx.viewportHeight);\n ctx.enable(ctx.DEPTH_TEST);\n ctx.enable(ctx.BLEND);\n ctx.blendEquation(ctx.FUNC_ADD);\n ctx.blendFunc(ctx.SRC_ALPHA, ctx.ONE_MINUS_SRC_ALPHA);\n ctx.depthMask(false);\n\n return ctx;\n } catch (e) {\n return null;\n }\n }\n\n private ensureWebGLContext() {\n for (let i = 0; i < 5; i++) {\n if (!this.ctx || this.ctx.isContextLost()) {\n // have to get a new canvas when context is lost by browser\n this.getNewCanvas();\n this.ctx = this.getWebGLCanvasContext();\n this.setUpShaders();\n } else {\n break;\n }\n }\n if (!this.ctx || this.ctx.isContextLost()) {\n throw new Error(\n 'Unable to get WebGL context for Oncoprint Minimap'\n );\n }\n }\n\n private createShaderProgram(\n vertex_shader: WebGLShader,\n fragment_shader: WebGLShader\n ) {\n const program = this.ctx.createProgram();\n this.ctx.attachShader(program, vertex_shader);\n this.ctx.attachShader(program, fragment_shader);\n\n this.ctx.linkProgram(program);\n\n const success = this.ctx.getProgramParameter(\n program,\n this.ctx.LINK_STATUS\n );\n if (!success) {\n const msg = this.ctx.getProgramInfoLog(program);\n this.ctx.deleteProgram(program);\n throw 'Unable to link shader program: ' + msg;\n }\n\n return program;\n }\n\n private createShader(\n source: string,\n type: 'VERTEX_SHADER' | 'FRAGMENT_SHADER'\n ) {\n const shader = this.ctx.createShader(this.ctx[type]);\n this.ctx.shaderSource(shader, source);\n this.ctx.compileShader(shader);\n\n const success = this.ctx.getShaderParameter(\n shader,\n this.ctx.COMPILE_STATUS\n );\n if (!success) {\n const msg = this.ctx.getShaderInfoLog(shader);\n this.ctx.deleteShader(shader);\n throw 'Unable to compile shader: ' + msg;\n }\n\n return shader;\n }\n\n private getWebGLContextAndSetUpMatrices() {\n this.ctx = this.getWebGLCanvasContext();\n if (this.ctx) {\n this.ext = this.ctx.getExtension('ANGLE_instanced_arrays');\n }\n (function initializeMatrices(self) {\n const mvMatrix = gl_matrix.mat4.create();\n gl_matrix.mat4.lookAt(mvMatrix, [0, 0, 1], [0, 0, 0], [0, 1, 0]);\n self.mvMatrix = mvMatrix;\n\n const pMatrix = gl_matrix.mat4.create();\n gl_matrix.mat4.ortho(\n pMatrix,\n 0,\n self.ctx.viewportWidth,\n self.ctx.viewportHeight,\n 0,\n -5,\n 1000\n ); // y axis inverted so that y increases down like SVG\n self.pMatrix = pMatrix;\n })(this);\n }\n\n private setUpShaders() {\n const vertex_shader_source = [\n 'precision highp float;',\n 'attribute float aPosVertex;',\n 'attribute float aColVertex;',\n 'attribute float aVertexOncoprintColumn;',\n 'uniform float columnWidth;',\n 'uniform float zoomX;',\n 'uniform float zoomY;',\n 'uniform mat4 uMVMatrix;',\n 'uniform mat4 uPMatrix;',\n 'uniform float offsetY;',\n 'uniform float positionBitPackBase;',\n 'uniform float texSize;',\n 'varying float texCoord;',\n 'vec3 unpackVec3(float packedVec3, float base) {',\n '\tfloat pos0 = floor(packedVec3 / (base*base));',\n '\tfloat pos0Contr = pos0*base*base;',\n '\tfloat pos1 = floor((packedVec3 - pos0Contr)/base);',\n '\tfloat pos1Contr = pos1*base;',\n '\tfloat pos2 = packedVec3 - pos0Contr - pos1Contr;',\n '\treturn vec3(pos0, pos1, pos2);',\n '}',\n 'void main(void) {',\n '\tgl_Position = vec4(unpackVec3(aPosVertex, positionBitPackBase), 1.0);',\n '\tgl_Position[0] += aVertexOncoprintColumn*columnWidth;',\n '\tgl_Position[1] += offsetY;',\n '\tgl_Position *= vec4(zoomX, zoomY, 1.0, 1.0);',\n '\tgl_Position = uPMatrix * uMVMatrix * gl_Position;',\n '\ttexCoord = (aColVertex + 0.5) / texSize;',\n '}',\n ].join('\\n');\n const fragment_shader_source = [\n 'precision mediump float;',\n 'varying float texCoord;',\n 'uniform sampler2D uSampler;',\n 'void main(void) {',\n ' gl_FragColor = texture2D(uSampler, vec2(texCoord, 0.5));',\n '}',\n ].join('\\n');\n const vertex_shader = this.createShader(\n vertex_shader_source,\n 'VERTEX_SHADER'\n );\n const fragment_shader = this.createShader(\n fragment_shader_source,\n 'FRAGMENT_SHADER'\n );\n\n const shader_program = this.createShaderProgram(\n vertex_shader,\n fragment_shader\n ) as OncoprintShaderProgram;\n shader_program.vertexPositionAttribute = this.ctx.getAttribLocation(\n shader_program,\n 'aPosVertex'\n );\n this.ctx.enableVertexAttribArray(\n shader_program.vertexPositionAttribute\n );\n shader_program.vertexColorAttribute = this.ctx.getAttribLocation(\n shader_program,\n 'aColVertex'\n );\n this.ctx.enableVertexAttribArray(shader_program.vertexColorAttribute);\n shader_program.vertexOncoprintColumnAttribute = this.ctx.getAttribLocation(\n shader_program,\n 'aVertexOncoprintColumn'\n );\n this.ctx.enableVertexAttribArray(\n shader_program.vertexOncoprintColumnAttribute\n );\n\n shader_program.samplerUniform = this.ctx.getUniformLocation(\n shader_program,\n 'uSampler'\n );\n shader_program.pMatrixUniform = this.ctx.getUniformLocation(\n shader_program,\n 'uPMatrix'\n );\n shader_program.mvMatrixUniform = this.ctx.getUniformLocation(\n shader_program,\n 'uMVMatrix'\n );\n shader_program.columnWidthUniform = this.ctx.getUniformLocation(\n shader_program,\n 'columnWidth'\n );\n shader_program.zoomXUniform = this.ctx.getUniformLocation(\n shader_program,\n 'zoomX'\n );\n shader_program.zoomYUniform = this.ctx.getUniformLocation(\n shader_program,\n 'zoomY'\n );\n shader_program.offsetYUniform = this.ctx.getUniformLocation(\n shader_program,\n 'offsetY'\n );\n shader_program.positionBitPackBaseUniform = this.ctx.getUniformLocation(\n shader_program,\n 'positionBitPackBase'\n );\n shader_program.texSizeUniform = this.ctx.getUniformLocation(\n shader_program,\n 'texSize'\n );\n\n this.shader_program = shader_program;\n }\n\n private getTrackBuffers(\n cell_view: OncoprintWebGLCellView,\n track_id: TrackId\n ) {\n const pos_buffer = this.ctx.createBuffer() as OncoprintVertexTrackBuffer;\n const pos_array = cell_view.vertex_data[track_id].pos_array;\n const universal_shapes_start_index =\n cell_view.vertex_data[track_id].universal_shapes_start_index;\n\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, pos_buffer);\n this.ctx.bufferData(\n this.ctx.ARRAY_BUFFER,\n pos_array,\n this.ctx.STATIC_DRAW\n );\n pos_buffer.itemSize = 1;\n pos_buffer.specificShapesNumItems =\n universal_shapes_start_index / pos_buffer.itemSize;\n pos_buffer.universalShapesNumItems =\n (pos_array.length - universal_shapes_start_index) /\n pos_buffer.itemSize;\n\n const col_buffer = this.ctx.createBuffer() as OncoprintVertexTrackBuffer;\n const col_array = cell_view.vertex_data[track_id].col_array;\n\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, col_buffer);\n this.ctx.bufferData(\n this.ctx.ARRAY_BUFFER,\n col_array,\n this.ctx.STATIC_DRAW\n );\n col_buffer.itemSize = 1;\n col_buffer.specificShapesNumItems =\n universal_shapes_start_index / col_buffer.itemSize;\n col_buffer.universalShapesNumItems =\n (col_array.length - universal_shapes_start_index) /\n col_buffer.itemSize;\n\n const tex = this.ctx.createTexture();\n this.ctx.bindTexture(this.ctx.TEXTURE_2D, tex);\n\n const color_bank = cell_view.vertex_data[track_id].col_bank;\n const width = Math.pow(\n 2,\n Math.ceil((Math as any).log2(color_bank.length / 4))\n );\n while (color_bank.length < 4 * width) {\n color_bank.push(0);\n }\n const height = 1;\n this.ctx.texImage2D(\n this.ctx.TEXTURE_2D,\n 0,\n this.ctx.RGBA,\n width,\n height,\n 0,\n this.ctx.RGBA,\n this.ctx.UNSIGNED_BYTE,\n new Uint8Array(color_bank)\n );\n this.ctx.texParameteri(\n this.ctx.TEXTURE_2D,\n this.ctx.TEXTURE_MIN_FILTER,\n this.ctx.NEAREST\n );\n this.ctx.texParameteri(\n this.ctx.TEXTURE_2D,\n this.ctx.TEXTURE_MAG_FILTER,\n this.ctx.NEAREST\n );\n\n const color_texture = { texture: tex, size: width };\n\n const vertex_column_buffer = this.ctx.createBuffer() as OncoprintTrackBuffer;\n const vertex_column_array = cell_view.vertex_column_array[track_id];\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, vertex_column_buffer);\n this.ctx.bufferData(\n this.ctx.ARRAY_BUFFER,\n new Float32Array(vertex_column_array),\n this.ctx.STATIC_DRAW\n );\n vertex_column_buffer.itemSize = 1;\n vertex_column_buffer.numItems =\n vertex_column_array.length / vertex_column_buffer.itemSize;\n\n return {\n position: pos_buffer,\n color: col_buffer,\n color_tex: color_texture,\n column: vertex_column_buffer,\n };\n }\n\n private getSimpleCountBuffer(model: OncoprintModel) {\n const numColumns = model.getIdOrder().length;\n const buffer = this.ctx.createBuffer() as OncoprintTrackBuffer;\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, buffer);\n this.ctx.bufferData(\n this.ctx.ARRAY_BUFFER,\n new Float32Array(_.range(0, numColumns)),\n this.ctx.STATIC_DRAW\n );\n buffer.itemSize = 1;\n buffer.numItems = numColumns;\n return buffer;\n }\n\n private drawOncoprint(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n if (!this.shouldRender) {\n return;\n }\n\n this.ensureWebGLContext();\n\n const zoom = this.getZoom(model);\n\n this.ctx.clearColor(1.0, 1.0, 1.0, 1.0);\n this.ctx.clear(this.ctx.COLOR_BUFFER_BIT | this.ctx.DEPTH_BUFFER_BIT);\n\n const tracks = model.getTracks();\n const simple_count_buffer = this.getSimpleCountBuffer(model);\n for (let i = 0; i < tracks.length; i++) {\n const track_id = tracks[i];\n const cell_top = model.getCellTops(track_id, true);\n const buffers = this.getTrackBuffers(cell_view, track_id);\n if (buffers.position.numItems === 0) {\n continue;\n }\n\n for (const forSpecificShapes of [false, true]) {\n const shader_program = this.shader_program;\n this.ctx.useProgram(shader_program);\n\n if (forSpecificShapes) {\n this.ctx.bindBuffer(\n this.ctx.ARRAY_BUFFER,\n buffers.position\n );\n this.ctx.vertexAttribPointer(\n shader_program.vertexPositionAttribute,\n buffers.position.itemSize,\n this.ctx.FLOAT,\n false,\n 0,\n 0\n );\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, buffers.color);\n this.ctx.vertexAttribPointer(\n shader_program.vertexColorAttribute,\n buffers.color.itemSize,\n this.ctx.FLOAT,\n false,\n 0,\n 0\n );\n\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, buffers.column);\n this.ctx.vertexAttribPointer(\n shader_program.vertexOncoprintColumnAttribute,\n buffers.column.itemSize,\n this.ctx.FLOAT,\n false,\n 0,\n 0\n );\n // make sure to set divisor 0, otherwise the track will only use the first item in the column buffer\n this.ext.vertexAttribDivisorANGLE(\n shader_program.vertexOncoprintColumnAttribute,\n 0\n );\n } else {\n // set up for drawArraysInstanced\n const universalShapesStart =\n buffers.position.specificShapesNumItems *\n buffers.position.itemSize;\n this.ctx.bindBuffer(\n this.ctx.ARRAY_BUFFER,\n buffers.position\n );\n this.ctx.vertexAttribPointer(\n shader_program.vertexPositionAttribute,\n buffers.position.itemSize,\n this.ctx.FLOAT,\n false,\n 0,\n 4 * universalShapesStart\n );\n\n this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER, buffers.color);\n this.ctx.vertexAttribPointer(\n shader_program.vertexColorAttribute,\n buffers.color.itemSize,\n this.ctx.FLOAT,\n false,\n 0,\n 4 * universalShapesStart\n );\n\n this.ctx.bindBuffer(\n this.ctx.ARRAY_BUFFER,\n simple_count_buffer\n );\n this.ctx.vertexAttribPointer(\n shader_program.vertexOncoprintColumnAttribute,\n 1,\n this.ctx.FLOAT,\n false,\n 0,\n 0\n );\n this.ext.vertexAttribDivisorANGLE(\n shader_program.vertexOncoprintColumnAttribute,\n 1\n );\n }\n\n this.ctx.activeTexture(this.ctx.TEXTURE0);\n this.ctx.bindTexture(\n this.ctx.TEXTURE_2D,\n buffers.color_tex.texture\n );\n this.ctx.uniform1i(this.shader_program.samplerUniform, 0);\n this.ctx.uniform1f(\n this.shader_program.texSizeUniform,\n buffers.color_tex.size\n );\n\n this.ctx.uniformMatrix4fv(\n this.shader_program.pMatrixUniform,\n false,\n this.pMatrix\n );\n this.ctx.uniformMatrix4fv(\n this.shader_program.mvMatrixUniform,\n false,\n this.mvMatrix\n );\n this.ctx.uniform1f(\n this.shader_program.columnWidthUniform,\n model.getCellWidth(true)\n );\n this.ctx.uniform1f(this.shader_program.zoomXUniform, zoom.x);\n this.ctx.uniform1f(this.shader_program.zoomYUniform, zoom.y);\n this.ctx.uniform1f(\n this.shader_program.offsetYUniform,\n cell_top\n );\n this.ctx.uniform1f(\n this.shader_program.positionBitPackBaseUniform,\n cell_view.position_bit_pack_base\n );\n\n if (forSpecificShapes) {\n this.ctx.drawArrays(\n this.ctx.TRIANGLES,\n 0,\n buffers.position.specificShapesNumItems\n );\n } else {\n this.ext.drawArraysInstancedANGLE(\n this.ctx.TRIANGLES,\n 0,\n buffers.position.itemSize *\n buffers.position.universalShapesNumItems,\n simple_count_buffer.numItems\n );\n }\n }\n this.ctx.flush();\n }\n }\n\n private getZoom(model: OncoprintModel) {\n let zoom_x =\n parseInt(this.$canvas[0].width as any, 10) /\n model.getOncoprintWidthNoColumnPaddingNoGaps();\n let zoom_y =\n parseInt(this.$canvas[0].height as any, 10) /\n model.getOncoprintHeight(true);\n zoom_x = Math.max(0, Math.min(1, zoom_x));\n zoom_y = Math.max(0, Math.min(1, zoom_y));\n return {\n x: zoom_x,\n y: zoom_y,\n };\n }\n\n private drawOverlayRect(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView,\n opt_rect?: OverlayRectSpec\n ) {\n if (!this.shouldRender) {\n return;\n }\n\n let left, width, top, height, left_col, right_col;\n if (opt_rect) {\n left = opt_rect.left;\n width = opt_rect.width;\n top = opt_rect.top;\n height = opt_rect.height;\n left_col = opt_rect.left_col;\n right_col = opt_rect.right_col;\n } else {\n const cell_width = model.getCellWidth(true);\n const cell_padding = model.getCellPadding(true);\n const viewport = cell_view.getViewportOncoprintSpace(model);\n\n const zoom = this.getZoom(model);\n left_col = model.getClosestColumnIndexToLeft(viewport.left, false);\n right_col = model.getClosestColumnIndexToLeft(\n viewport.right,\n false,\n true\n );\n left = left_col * cell_width * zoom.x;\n width = (right_col - left_col) * cell_width * zoom.x;\n top = viewport.top * zoom.y;\n height = (viewport.bottom - viewport.top) * zoom.y;\n }\n\n const ctx = this.overlay_ctx;\n const canv = this.$overlay_canvas[0];\n const canv_width = parseInt(canv.width as any, 10);\n const canv_height = parseInt(canv.height as any, 10);\n\n // Clear\n ctx.fillStyle = 'rgba(0,0,0,0)';\n ctx.clearRect(0, 0, canv_width, canv_height);\n // Draw rectangle\n ctx.fillStyle = 'rgba(255,255,255,0.4)';\n ctx.fillRect(left, top, width, height);\n // Draw border line by line\n const unhover_color = 'rgba(0,0,0,0.75)';\n const hover_color = 'rgba(255,0,0,1)';\n const unhover_width = 1;\n const hover_width = 2;\n const top_is_hovered =\n this.resize_hover === 't' ||\n this.resize_hover === 'tr' ||\n this.resize_hover === 'tl';\n const right_is_hovered =\n this.resize_hover === 'r' ||\n this.resize_hover === 'tr' ||\n this.resize_hover === 'br';\n const bottom_is_hovered =\n this.resize_hover === 'b' ||\n this.resize_hover === 'br' ||\n this.resize_hover === 'bl';\n const left_is_hovered =\n this.resize_hover === 'l' ||\n this.resize_hover === 'tl' ||\n this.resize_hover === 'bl';\n // Draw top border\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.strokeStyle = top_is_hovered ? hover_color : unhover_color;\n ctx.lineWidth = top_is_hovered ? hover_width : unhover_width;\n ctx.lineTo(left + width, top);\n ctx.stroke();\n // Draw right border\n ctx.beginPath();\n ctx.moveTo(left + width, top);\n ctx.strokeStyle = right_is_hovered ? hover_color : unhover_color;\n ctx.lineWidth = right_is_hovered ? hover_width : unhover_width;\n ctx.lineTo(left + width, top + height);\n ctx.stroke();\n // Draw bottom border\n ctx.beginPath();\n ctx.moveTo(left + width, top + height);\n ctx.strokeStyle = bottom_is_hovered ? hover_color : unhover_color;\n ctx.lineWidth = bottom_is_hovered ? hover_width : unhover_width;\n ctx.lineTo(left, top + height);\n ctx.stroke();\n // Draw left border\n ctx.beginPath();\n ctx.moveTo(left, top + height);\n ctx.strokeStyle = left_is_hovered ? hover_color : unhover_color;\n ctx.lineWidth = left_is_hovered ? hover_width : unhover_width;\n ctx.lineTo(left, top);\n ctx.stroke();\n\n this.current_rect.setParams({\n top: top,\n left_col: left_col,\n right_col: right_col,\n height: height,\n });\n }\n\n private drawOncoprintAndOverlayRect(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n if (!this.shouldRender) {\n return;\n }\n this.drawOncoprint(model, cell_view);\n this.drawOverlayRect(model, cell_view);\n }\n\n // API BEGINS HERE\n\n public moveTrack(model: OncoprintModel, cell_view: OncoprintWebGLCellView) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n public addTracks(model: OncoprintModel, cell_view: OncoprintWebGLCellView) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n public removeTrack(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n public setHorzZoom(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOverlayRect(model, cell_view);\n this.horizontal_zoom.setSliderValue(model.getHorzZoom());\n }\n public setVertZoom(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOverlayRect(model, cell_view);\n this.vertical_zoom.setSliderValue(model.getVertZoom());\n }\n public setZoom(model: OncoprintModel, cell_view: OncoprintWebGLCellView) {\n this.drawOverlayRect(model, cell_view);\n this.horizontal_zoom.setSliderValue(model.getHorzZoom());\n this.vertical_zoom.setSliderValue(model.getVertZoom());\n }\n public setScroll(model: OncoprintModel, cell_view: OncoprintWebGLCellView) {\n this.drawOverlayRect(model, cell_view);\n }\n public setHorzScroll(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOverlayRect(model, cell_view);\n }\n public setVertScroll(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOverlayRect(model, cell_view);\n }\n public setViewport(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOverlayRect(model, cell_view);\n this.horizontal_zoom.setSliderValue(model.getHorzZoom());\n this.vertical_zoom.setSliderValue(model.getVertZoom());\n }\n public sort(model: OncoprintModel, cell_view: OncoprintWebGLCellView) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n public setTrackData(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n public shareRuleSet(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n public setRuleSet(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n public setIdOrder(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n public setTrackGroupHeader(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n public suppressRendering() {\n this.rendering_suppressed = true;\n }\n public releaseRendering(\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.rendering_suppressed = false;\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n public hideIds(model: OncoprintModel, cell_view: OncoprintWebGLCellView) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n\n public setMinimapVisible(\n visible: boolean,\n model?: OncoprintModel,\n cell_view?: OncoprintWebGLCellView\n ) {\n this.visible = visible;\n\n if (this.visible && model && cell_view) {\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n }\n\n public setWindowPosition(x: number, y: number) {\n this.$div.css({ top: y, left: x });\n }\n\n public setWidth(\n w: number,\n model: OncoprintModel,\n cell_view: OncoprintWebGLCellView\n ) {\n this.$canvas[0].width = w;\n this.$overlay_canvas[0].width = w;\n this.getWebGLContextAndSetUpMatrices();\n this.setUpShaders();\n this.overlay_ctx = this.$overlay_canvas[0].getContext('2d');\n\n this.drawOncoprintAndOverlayRect(model, cell_view);\n }\n}\n","import './polyfill';\n\nimport OncoprintModel, {\n ColumnId,\n ColumnLabel,\n ColumnProp,\n CustomTrackOption,\n Datum,\n LibraryTrackSpec,\n SortConfig,\n TrackGroup,\n TrackGroupHeader,\n TrackGroupIndex,\n TrackId,\n TrackSortDirection,\n TrackSortSpecification,\n TrackTooltipFn,\n UserTrackSpec,\n} from './oncoprintmodel';\nimport OncoprintWebGLCellView from './oncoprintwebglcellview';\nimport OncoprintLabelView from './oncoprintlabelview';\nimport OncoprintRuleSet, { RuleSetParams } from './oncoprintruleset';\nimport OncoprintTrackOptionsView from './oncoprinttrackoptionsview';\nimport OncoprintLegendView from './oncoprintlegendrenderer';\nimport OncoprintToolTip from './oncoprinttooltip';\nimport OncoprintTrackInfoView from './oncoprinttrackinfoview';\nimport OncoprintMinimapView, {\n MinimapViewportSpec,\n} from './oncoprintminimapview';\n\nimport svgfactory from './svgfactory';\n\nimport $ from 'jquery';\nimport { clamp } from './utils';\nimport OncoprintHeaderView from './oncoprintheaderview';\n\nexport type InitParams = {\n init_cell_width?: number;\n init_cell_padding?: number;\n cell_padding_off_cell_width_threshold?: number;\n init_horz_zoom?: number;\n init_vert_zoom?: number;\n init_track_group_padding?: number;\n init_cell_padding_on?: boolean;\n max_height?: number;\n};\n\nexport type HorzZoomCallback = (zoom: number) => void;\nexport type MinimapCloseCallback = () => void;\nexport type CellMouseOverCallback = (\n uid: ColumnId | null,\n track_id?: TrackId\n) => void;\nexport type CellClickCallback = (\n uid: ColumnId | null,\n track_id?: TrackId\n) => void;\nexport type ClipboardChangeCallback = (ids: ColumnId[]) => void;\n\nconst nextTrackId = (function() {\n let ctr = 0;\n return function() {\n ctr += 1;\n return ctr;\n };\n})();\n\nexport default class Oncoprint {\n // this is the controller\n\n private lastSortId = 0;\n private incrementLastSortId() {\n this.lastSortId = (this.lastSortId + 1) % 1000000; // make sure we don't have any overflow problems. Definitely won't have a million sorts pending at once\n }\n\n public destroyed: boolean;\n public webgl_unavailable: boolean;\n private $ctr: JQuery;\n private $oncoprint_ctr: JQuery;\n private $cell_div: JQuery;\n private $header_div: JQuery;\n private $legend_div: JQuery;\n private $track_options_div: JQuery;\n private $track_info_div: JQuery;\n private $dummy_scroll_div: JQuery;\n private $minimap_div: JQuery;\n private $cell_canvas: JQuery;\n private $cell_overlay_canvas: JQuery;\n\n public model: OncoprintModel;\n public header_view: OncoprintHeaderView;\n public cell_view: OncoprintWebGLCellView;\n public minimap_view: OncoprintMinimapView;\n public track_options_view: OncoprintTrackOptionsView;\n public track_info_view: OncoprintTrackInfoView;\n public label_view: OncoprintLabelView;\n public legend_view: OncoprintLegendView;\n\n private keep_horz_zoomed_to_fit: boolean;\n private keep_horz_zoomed_to_fit_ids: ColumnId[];\n private pending_resize_and_organize: boolean;\n\n private horz_zoom_callbacks: HorzZoomCallback[];\n private minimap_close_callbacks: MinimapCloseCallback[];\n private cell_mouse_over_callbacks: CellMouseOverCallback[];\n private cell_click_callbacks: CellClickCallback[];\n private id_clipboard: ColumnId[];\n private clipboard_change_callbacks: ClipboardChangeCallback[];\n\n private target_dummy_scroll_left: number;\n private target_dummy_scroll_top: number;\n\n private getCellViewHeight = () =>\n this.cell_view.getVisibleAreaHeight(this.model);\n\n constructor(\n private ctr_selector: string,\n private width: number,\n params?: InitParams\n ) {\n params = params || {};\n\n const self = this;\n\n this.destroyed = false;\n this.webgl_unavailable =\n document\n .createElement('canvas')\n .getContext('experimental-webgl') === null;\n if (this.webgl_unavailable) {\n $(ctr_selector).append(\n \"<p class='oncoprintjs__webgl_unavailable_message'>WebGL context cannot be retrieved, so oncoprint cannot be used. Please visit <a href='http://webglreport.com'>WebGL Report</a> to explore your browsers WebGL capabilities.</p>\"\n );\n return;\n }\n\n const $ctr = $('<span></span>')\n .css({ position: 'relative', display: 'inline-block' })\n .appendTo(ctr_selector);\n const $oncoprint_ctr = $('<div></div>')\n .css({ position: 'absolute', display: 'inline-block' })\n .appendTo($ctr);\n\n const $tooltip_ctr = $('<span></span>')\n .css({ position: 'fixed', top: 0, left: 0, 'z-index': 99999 })\n .appendTo(ctr_selector);\n const $legend_ctr = $('<div></div>')\n .css({\n position: 'absolute',\n display: 'inline-block',\n top: 0,\n left: 0,\n 'min-height': 1,\n })\n .appendTo($ctr);\n\n const $label_canvas = $('<canvas></canvas>')\n .css({\n display: 'inline-block',\n position: 'absolute',\n left: '0px',\n top: '0px',\n })\n .addClass('noselect')\n .attr({ width: '150', height: '250' }) as JQuery<HTMLCanvasElement>;\n\n const $header_div = $('<div></div>')\n .css({ position: 'absolute' })\n .addClass('oncoprintjs__header_div');\n\n const $track_options_div = $('<div></div>')\n .css({ position: 'absolute', left: '150px', top: '0px' })\n .addClass('noselect')\n .attr({ width: '50', height: '250' });\n\n const $legend_div = $('<div></div>')\n .css({ position: 'absolute', top: '250px', 'min-height': 1 })\n .addClass('noselect oncoprint-legend-div');\n\n const $cell_div = $('<div>')\n .css({\n width: width,\n display: 'inline-block',\n position: 'absolute',\n left: '200px',\n top: '0px',\n })\n .addClass('noselect');\n\n const $cell_canvas = $('<canvas></canvas>')\n .attr({ width: '0px', height: '0px' })\n .css({ position: 'absolute', top: '0px', left: '0px' })\n .addClass('noselect') as JQuery<HTMLCanvasElement>;\n\n const $dummy_scroll_div = $('<div>')\n .css({\n position: 'absolute',\n 'overflow-x': 'scroll',\n 'overflow-y': 'scroll',\n top: '0',\n left: '0px',\n height: '1px',\n })\n .addClass('oncoprintjs__scroll_div');\n\n const $dummy_scroll_div_contents = $('<div>').appendTo(\n $dummy_scroll_div\n );\n\n const $cell_overlay_canvas = $('<canvas></canvas>')\n .attr({ width: '0px', height: '0px' })\n .css({ position: 'absolute', top: '0px', left: '0px' })\n .addClass('noselect')\n .addClass('oncoprintjs__cell_overlay_div') as JQuery<\n HTMLCanvasElement\n >;\n\n const $column_label_canvas = $('<canvas></canvas>')\n .attr({ width: '0px', height: '0px' })\n .css({\n position: 'absolute',\n top: '0px',\n left: '0px',\n 'pointer-events': 'none', // since column label canvas is on top of cell overlay canvas, we need to make it not capture any mouse events\n })\n .addClass('noselect')\n .addClass('oncoprintjs__column_label_canvas') as JQuery<\n HTMLCanvasElement\n >;\n\n const $track_info_div = $('<div>').css({ position: 'absolute' });\n\n const $minimap_div = $('<div>')\n .css({\n position: 'absolute',\n outline: 'solid 1px black',\n display: 'none',\n })\n .addClass('noselect');\n\n const $minimap_canvas = $('<canvas></canvas>')\n .attr('width', 300)\n .attr('height', 300)\n .css({\n position: 'absolute',\n top: '0px',\n left: '0px',\n 'z-index': 0,\n })\n .addClass('noselect') as JQuery<HTMLCanvasElement>;\n const $minimap_overlay_canvas = $('<canvas></canvas>')\n .attr('width', 300)\n .attr('height', 300)\n .css({\n position: 'absolute',\n top: '0px',\n left: '0px',\n 'z-index': 1,\n })\n .addClass('noselect') as JQuery<HTMLCanvasElement>;\n\n $label_canvas.appendTo($oncoprint_ctr);\n $cell_div.appendTo($oncoprint_ctr);\n $track_options_div.appendTo($oncoprint_ctr);\n $track_info_div.appendTo($oncoprint_ctr);\n $header_div.appendTo($oncoprint_ctr); // this needs to go at the end because otherwise canvases cover it up\n\n $legend_div.appendTo($legend_ctr);\n\n $minimap_div.appendTo($ctr);\n\n $cell_canvas.appendTo($cell_div);\n $cell_overlay_canvas.appendTo($cell_div);\n $column_label_canvas.appendTo($cell_div); // column labels should show above the overlay canvas because the text should show over the highlights\n $dummy_scroll_div.appendTo($cell_div);\n $dummy_scroll_div.on('mousemove mousedown mouseup', function(evt) {\n $cell_overlay_canvas.trigger(evt);\n });\n $minimap_canvas.appendTo($minimap_div);\n $minimap_overlay_canvas.appendTo($minimap_div);\n\n this.$ctr = $ctr;\n this.$oncoprint_ctr = $oncoprint_ctr;\n this.$header_div = $header_div;\n this.$cell_div = $cell_div;\n this.$legend_div = $legend_div;\n this.$track_options_div = $track_options_div;\n this.$track_info_div = $track_info_div;\n this.$dummy_scroll_div = $dummy_scroll_div;\n this.$minimap_div = $minimap_div;\n\n this.$cell_canvas = $cell_canvas;\n this.$cell_overlay_canvas = $cell_overlay_canvas;\n\n this.model = new OncoprintModel(params);\n\n this.header_view = new OncoprintHeaderView(this.$header_div);\n\n this.cell_view = new OncoprintWebGLCellView(\n $cell_div,\n $cell_canvas,\n $cell_overlay_canvas,\n $column_label_canvas,\n $dummy_scroll_div_contents,\n this.model,\n new OncoprintToolTip($tooltip_ctr),\n function(left, right) {\n const enclosed_ids = self.model.getIdsInZoomedLeftInterval(\n left,\n right\n );\n self.setHorzZoom(\n self.model.getHorzZoomToFit(\n self.cell_view.getVisibleAreaWidth(),\n enclosed_ids\n )\n );\n self.$dummy_scroll_div.scrollLeft(\n self.model.getZoomedColumnLeft(enclosed_ids[0])\n );\n },\n function(uid, track_id) {\n self.doCellMouseOver(uid, track_id);\n },\n function(uid, track_id) {\n self.doCellClick(uid, track_id);\n }\n );\n\n this.minimap_view = new OncoprintMinimapView(\n $minimap_div,\n $minimap_canvas,\n $minimap_overlay_canvas,\n this.model,\n this.cell_view,\n 150,\n 150,\n function(x, y) {\n self.setScroll(x, y);\n },\n function(vp: MinimapViewportSpec) {\n self.setViewport(vp);\n },\n function(val: number) {\n self.setHorzZoomCentered(val);\n },\n function(val: number) {\n // Save unzoomed vertical center pre-zoom\n const prev_viewport = self.cell_view.getViewportOncoprintSpace(\n self.model\n );\n const center_onc_space =\n (prev_viewport.top + prev_viewport.bottom) / 2;\n\n // Execute zoom\n self.setVertZoom(val);\n\n // Set scroll to recenter the vertical center\n const viewport = self.cell_view.getViewportOncoprintSpace(\n self.model\n );\n const half_viewport_height_zoomed =\n (self.model.getVertZoom() *\n (viewport.bottom - viewport.top)) /\n 2;\n\n self.setVertScroll(\n center_onc_space * self.model.getVertZoom() -\n half_viewport_height_zoomed\n );\n },\n function() {\n self.updateHorzZoomToFit();\n const left = self.model.getZoomedColumnLeft();\n self.setHorzScroll(\n Math.min.apply(\n null,\n self.keep_horz_zoomed_to_fit_ids.map(function(id) {\n return left[id];\n })\n )\n );\n },\n function() {\n self.setMinimapVisible(false);\n }\n );\n\n this.track_options_view = new OncoprintTrackOptionsView(\n $track_options_div,\n function(track_id: TrackId) {\n // move up\n const tracks = self.model.getContainingTrackGroup(track_id);\n const index = tracks.indexOf(track_id);\n if (index > 0) {\n let new_previous_track = null;\n if (index >= 2) {\n new_previous_track = tracks[index - 2];\n }\n self.moveTrack(track_id, new_previous_track);\n }\n },\n function(track_id: TrackId) {\n // move down\n const tracks = self.model.getContainingTrackGroup(track_id);\n const index = tracks.indexOf(track_id);\n if (index < tracks.length - 1) {\n self.moveTrack(track_id, tracks[index + 1]);\n }\n },\n function(track_id: TrackId) {\n const callback = self.model.getTrackRemoveOptionCallback(\n track_id\n );\n if (callback) {\n callback(track_id);\n } else {\n self.removeTrack(track_id);\n }\n },\n function(track_id, dir) {\n self.setTrackSortDirection(track_id, dir);\n },\n function(track_id: TrackId) {\n self.removeExpansionTracksFor(track_id);\n },\n self.setTrackShowGaps.bind(self)\n );\n this.track_info_view = new OncoprintTrackInfoView(\n $track_info_div,\n new OncoprintToolTip($tooltip_ctr)\n );\n\n //this.track_info_view = new OncoprintTrackInfoView($track_info_div);\n\n this.label_view = new OncoprintLabelView(\n $label_canvas,\n this.model,\n new OncoprintToolTip($tooltip_ctr, { noselect: true })\n );\n this.label_view.setDragCallback(function(\n target_track,\n new_previous_track\n ) {\n self.moveTrack(target_track, new_previous_track);\n });\n\n this.legend_view = new OncoprintLegendView($legend_div, 10, 20);\n\n this.keep_horz_zoomed_to_fit = false;\n this.keep_horz_zoomed_to_fit_ids = [];\n\n // We need to handle scrolling this way because for some reason huge\n // canvas elements have terrible resolution.\n\n this.target_dummy_scroll_left = 0;\n this.target_dummy_scroll_top = 0;\n\n (function setUpOncoprintScroll(oncoprint) {\n $dummy_scroll_div.scroll(function(e) {\n const dummy_scroll_left = $dummy_scroll_div.scrollLeft();\n const dummy_scroll_top = $dummy_scroll_div.scrollTop();\n if (\n dummy_scroll_left !== self.target_dummy_scroll_left ||\n dummy_scroll_top !== self.target_dummy_scroll_top\n ) {\n // In setDummyScrollDivScroll, where we intend to set the scroll programmatically without\n //\ttriggering the handler, we set target_dummy_scroll_left and target_dummy_scroll_top,\n //\tso if they're not set (we get inside this block), then it's a user-triggered scroll.\n //\n // Set oncoprint scroll to match\n self.target_dummy_scroll_left = dummy_scroll_left;\n self.target_dummy_scroll_top = dummy_scroll_top;\n const maximum_dummy_scroll_div_scroll = oncoprint.maxDummyScrollDivScroll();\n const maximum_div_scroll_left =\n maximum_dummy_scroll_div_scroll.left;\n const maximum_div_scroll_top =\n maximum_dummy_scroll_div_scroll.top;\n let scroll_left_prop =\n maximum_div_scroll_left > 0\n ? dummy_scroll_left / maximum_div_scroll_left\n : 0;\n let scroll_top_prop =\n maximum_div_scroll_top > 0\n ? dummy_scroll_top / maximum_div_scroll_top\n : 0;\n scroll_left_prop = clamp(scroll_left_prop, 0, 1);\n scroll_top_prop = clamp(scroll_top_prop, 0, 1);\n const maximum_scroll_left = oncoprint.maxOncoprintScrollLeft();\n const maximum_scroll_top = oncoprint.maxOncoprintScrollTop();\n const scroll_left = Math.round(\n maximum_scroll_left * scroll_left_prop\n );\n const scroll_top = Math.round(\n maximum_scroll_top * scroll_top_prop\n );\n self.keep_horz_zoomed_to_fit = false;\n\n oncoprint.doSetScroll(scroll_left, scroll_top);\n }\n });\n })(self);\n\n this.horz_zoom_callbacks = [];\n this.minimap_close_callbacks = [];\n this.cell_mouse_over_callbacks = [];\n this.cell_click_callbacks = [];\n\n this.id_clipboard = [];\n this.clipboard_change_callbacks = [];\n\n this.pending_resize_and_organize = false;\n }\n\n private _SetLegendTop() {\n if (this.model.rendering_suppressed_depth > 0) {\n return;\n }\n this.$legend_div.css({\n top: this.cell_view.getVisibleAreaHeight(this.model) + 30,\n });\n }\n private setLegendTopAfterTimeout() {\n if (this.model.rendering_suppressed_depth > 0) {\n return;\n }\n const self = this;\n setTimeout(function() {\n self.setHeight();\n self._SetLegendTop();\n }, 0);\n }\n\n private setHeight() {\n this.$ctr.css({\n 'min-height':\n this.cell_view.getVisibleAreaHeight(this.model) +\n Math.max(\n this.$legend_div.outerHeight(),\n this.$minimap_div.is(':visible')\n ? this.$minimap_div.outerHeight()\n : 0\n ) +\n 30,\n });\n }\n\n private resizeAndOrganize(onComplete?: () => void) {\n if (this.model.rendering_suppressed_depth > 0) {\n return;\n }\n const ctr_width = $(this.ctr_selector).width();\n if (ctr_width === 0) {\n // dont make any adjustments while oncoprint is offscreen, DOM size calculations would be messed up\n this.pending_resize_and_organize = true;\n return;\n }\n this.$track_options_div.css({ left: this.label_view.getWidth() });\n this.$header_div.css({\n left: 0,\n top: 0,\n width: this.width,\n height: this.cell_view.getVisibleAreaHeight(this.model),\n });\n this.$track_info_div.css({\n left:\n this.label_view.getWidth() + this.track_options_view.getWidth(),\n });\n const cell_div_left =\n this.label_view.getWidth() +\n this.track_options_view.getWidth() +\n this.track_info_view.getWidth();\n this.$cell_div.css('left', cell_div_left);\n this.cell_view.setWidth(this.width - cell_div_left - 20, this.model);\n\n this._SetLegendTop();\n this.legend_view.setWidth(\n this.width - this.$minimap_div.outerWidth() - 20,\n this.model\n );\n\n this.setHeight();\n this.$ctr.css({ 'min-width': this.width });\n\n const self = this;\n setTimeout(function() {\n if (self.keep_horz_zoomed_to_fit) {\n self.updateHorzZoomToFit();\n }\n onComplete && onComplete();\n }, 0);\n }\n\n private resizeAndOrganizeAfterTimeout(onComplete?: () => void) {\n if (this.model.rendering_suppressed_depth > 0) {\n return;\n }\n const self = this;\n setTimeout(function() {\n self.resizeAndOrganize(onComplete);\n }, 0);\n }\n\n private maxOncoprintScrollLeft() {\n return Math.max(\n 0,\n this.cell_view.getTotalWidth(this.model) -\n this.cell_view.getVisibleAreaWidth()\n );\n }\n\n private maxOncoprintScrollTop() {\n return Math.max(\n 0,\n this.cell_view.getTotalHeight(this.model) -\n this.cell_view.getVisibleAreaHeight(this.model)\n );\n }\n\n private maxDummyScrollDivScroll() {\n const dummy_scroll_div_client_size = this.cell_view.getDummyScrollDivClientSize();\n const maximum_div_scroll_left = Math.max(\n 0,\n this.$dummy_scroll_div[0].scrollWidth -\n dummy_scroll_div_client_size.width\n );\n const maximum_div_scroll_top = Math.max(\n 0,\n this.$dummy_scroll_div[0].scrollHeight -\n dummy_scroll_div_client_size.height\n );\n return { left: maximum_div_scroll_left, top: maximum_div_scroll_top };\n }\n\n public setMinimapVisible(visible: boolean) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n if (visible) {\n this.$minimap_div.css({\n display: 'block',\n top: 0,\n left:\n $(this.ctr_selector).width() -\n this.$minimap_div.outerWidth() -\n 10,\n });\n this.minimap_view.setMinimapVisible(\n true,\n this.model,\n this.cell_view\n );\n } else {\n this.$minimap_div.css('display', 'none');\n this.minimap_view.setMinimapVisible(false);\n this.executeMinimapCloseCallbacks();\n }\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public scrollTo(left: number) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.$dummy_scroll_div.scrollLeft(left);\n }\n public onHorzZoom(callback: HorzZoomCallback) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.horz_zoom_callbacks.push(callback);\n }\n public onMinimapClose(callback: MinimapCloseCallback) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.minimap_close_callbacks.push(callback);\n }\n\n // methods that propagate/delegate to views\n public moveTrack(target_track: TrackId, new_previous_track: TrackId) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.moveTrack(target_track, new_previous_track);\n this.cell_view.moveTrack(this.model);\n this.header_view.render(this.model);\n this.label_view.moveTrack(this.model, this.getCellViewHeight);\n this.track_options_view.moveTrack(this.model, this.getCellViewHeight);\n this.track_info_view.moveTrack(this.model, this.getCellViewHeight);\n this.minimap_view.moveTrack(this.model, this.cell_view);\n\n if (\n this.model.keep_sorted &&\n this.model.isSortAffected(\n [target_track, new_previous_track],\n 'track'\n )\n ) {\n this.sort();\n }\n\n this.resizeAndOrganizeAfterTimeout();\n }\n public setTrackGroupOrder(\n index: TrackGroupIndex,\n track_order: TrackId[],\n dont_sort?: boolean\n ) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setTrackGroupOrder(index, track_order);\n this.cell_view.setTrackGroupOrder(this.model);\n this.header_view.render(this.model);\n this.label_view.setTrackGroupOrder(this.model, this.getCellViewHeight);\n this.track_options_view.setTrackGroupOrder(this.model);\n this.track_info_view.setTrackGroupOrder(\n this.model,\n this.getCellViewHeight\n );\n\n if (\n !dont_sort &&\n this.model.keep_sorted &&\n this.model.isSortAffected(index, 'group')\n ) {\n this.sort();\n }\n\n this.resizeAndOrganizeAfterTimeout();\n }\n public setTrackGroupLegendOrder(group_order: TrackGroupIndex[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setTrackGroupLegendOrder(group_order);\n this.legend_view.setTrackGroupLegendOrder(this.model);\n\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public keepSorted(keep_sorted?: boolean) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n const oldValue = this.model.keep_sorted;\n this.model.keep_sorted =\n typeof keep_sorted === 'undefined' ? true : keep_sorted;\n if (this.model.keep_sorted && this.model.keep_sorted !== oldValue) {\n this.sort();\n }\n }\n\n public addTracks(params_list: UserTrackSpec<Datum>[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return [];\n }\n // Update model\n const track_ids: TrackId[] = [];\n const library_params_list = (params_list as LibraryTrackSpec<\n Datum\n >[]).map(function(o) {\n o.track_id = nextTrackId();\n o.rule_set = OncoprintRuleSet(o.rule_set_params);\n track_ids.push(o.track_id);\n return o;\n });\n\n this.model.addTracks(library_params_list);\n // Update views\n this.cell_view.addTracks(this.model, track_ids);\n this.label_view.addTracks(\n this.model,\n track_ids,\n this.getCellViewHeight\n );\n this.header_view.render(this.model);\n this.track_options_view.addTracks(this.model, this.getCellViewHeight);\n this.track_info_view.addTracks(this.model, this.getCellViewHeight);\n this.legend_view.addTracks(this.model);\n this.minimap_view.addTracks(this.model, this.cell_view);\n\n if (\n this.model.keep_sorted &&\n this.model.isSortAffected(track_ids, 'track')\n ) {\n this.sort();\n }\n this.resizeAndOrganizeAfterTimeout();\n return track_ids;\n }\n\n public removeTrack(track_id: TrackId) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n // Update model\n this.model.removeTrack(track_id);\n // Update views\n this.cell_view.removeTrack(this.model, track_id);\n this.header_view.render(this.model);\n this.label_view.removeTrack(this.model, this.getCellViewHeight);\n this.track_options_view.removeTrack(\n this.model,\n track_id,\n this.getCellViewHeight\n );\n this.track_info_view.removeTrack(this.model, this.getCellViewHeight);\n this.legend_view.removeTrack(this.model);\n this.minimap_view.removeTrack(this.model, this.cell_view);\n\n if (\n this.model.keep_sorted &&\n this.model.isSortAffected(track_id, 'track')\n ) {\n this.sort();\n }\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public removeTracks(track_ids: TrackId[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n for (let i = 0; i < track_ids.length; i++) {\n this.removeTrack(track_ids[i]);\n }\n }\n\n public getTracks() {\n if (this.webgl_unavailable || this.destroyed) {\n return [];\n }\n return this.model.getTracks().slice();\n }\n\n public removeAllTracks() {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n const track_ids = this.model.getTracks();\n this.removeTracks(track_ids);\n }\n\n public removeExpansionTracksFor(track_id: TrackId) {\n // remove all expansion tracks for this track\n this.removeTracks(this.model.track_expansion_tracks[track_id].slice());\n }\n\n public disableTrackExpansion(track_id: TrackId) {\n this.model.disableTrackExpansion(track_id);\n }\n\n public enableTrackExpansion(track_id: TrackId) {\n this.model.enableTrackExpansion(track_id);\n }\n\n public removeAllExpansionTracksInGroup(index: TrackGroupIndex) {\n const tracks_in_group = this.model.getTrackGroups()[index].tracks,\n expanded_tracks = [];\n let i;\n for (i = 0; i < tracks_in_group.length; i++) {\n if (this.model.isTrackExpanded(tracks_in_group[i])) {\n expanded_tracks.push(tracks_in_group[i]);\n }\n }\n this.suppressRendering();\n for (i = 0; i < expanded_tracks.length; i++) {\n // assume that the expanded tracks are not themselves removed here\n this.removeExpansionTracksFor(expanded_tracks[i]);\n }\n this.releaseRendering();\n }\n\n public setHorzZoomToFit(ids: ColumnId[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.keep_horz_zoomed_to_fit = true;\n this.updateHorzZoomToFitIds(ids);\n this.updateHorzZoomToFit();\n }\n public updateHorzZoomToFitIds(ids: ColumnId[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.keep_horz_zoomed_to_fit_ids = ids.slice();\n if (this.keep_horz_zoomed_to_fit) {\n this.updateHorzZoomToFit();\n }\n }\n private updateHorzZoomToFit() {\n this.setHorzZoom(\n this.getHorzZoomToFit(this.keep_horz_zoomed_to_fit_ids),\n true\n );\n }\n private getHorzZoomToFit(ids: ColumnId[]) {\n ids = ids || [];\n return this.model.getHorzZoomToFit(\n this.cell_view.getVisibleAreaWidth(),\n ids\n );\n }\n private executeHorzZoomCallbacks() {\n for (let i = 0; i < this.horz_zoom_callbacks.length; i++) {\n this.horz_zoom_callbacks[i](this.model.getHorzZoom());\n }\n }\n\n private executeMinimapCloseCallbacks() {\n for (let i = 0; i < this.minimap_close_callbacks.length; i++) {\n this.minimap_close_callbacks[i]();\n }\n }\n\n private doCellMouseOver(uid: ColumnId, track_id: TrackId) {\n if (uid !== null) {\n this.highlightTrackLabelOnly(track_id);\n } else {\n this.highlightTrackLabelOnly(null);\n }\n for (let i = 0; i < this.cell_mouse_over_callbacks.length; i++) {\n this.cell_mouse_over_callbacks[i](uid, track_id);\n }\n }\n\n private doCellClick(uid: ColumnId, track_id: TrackId) {\n for (let i = 0; i < this.cell_click_callbacks.length; i++) {\n this.cell_click_callbacks[i](uid, track_id);\n }\n }\n\n public getHorzZoom() {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n return this.model.getHorzZoom();\n }\n\n public setHorzZoomCentered(z: number) {\n // Save id thats at center pre-zoom\n const centerColIndex = this.cell_view.getViewportOncoprintSpace(\n this.model\n ).center_col_index;\n const centerId = this.model.getIdOrder()[centerColIndex];\n\n // Execute zoom\n this.setHorzZoom(z);\n\n // Set scroll to recenter the saved id\n this.setHorzScroll(\n this.model.getZoomedColumnLeft(centerId) -\n this.cell_view.visible_area_width / 2\n );\n }\n\n public setHorzZoom(z: number, still_keep_horz_zoomed_to_fit?: boolean) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n this.keep_horz_zoomed_to_fit =\n this.keep_horz_zoomed_to_fit && still_keep_horz_zoomed_to_fit;\n\n if (this.model.getHorzZoom() !== z) {\n // Update model if new zoom is different\n this.model.setHorzZoom(z);\n // Update views\n this.cell_view.setHorzZoom(this.model);\n this.minimap_view.setHorzZoom(this.model, this.cell_view);\n\n this.executeHorzZoomCallbacks();\n this.resizeAndOrganizeAfterTimeout();\n }\n return this.model.getHorzZoom();\n }\n\n public getVertZoom() {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n return this.model.getVertZoom();\n }\n\n public setVertZoom(z: number) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n // Update model\n this.model.setVertZoom(z);\n // Update views\n this.cell_view.setVertZoom(this.model);\n this.header_view.render(this.model);\n this.label_view.setVertZoom(this.model, this.getCellViewHeight);\n this.track_info_view.setVertZoom(this.model, this.getCellViewHeight);\n this.track_options_view.setVertZoom(this.model, this.getCellViewHeight);\n this.minimap_view.setVertZoom(this.model, this.cell_view);\n\n this.resizeAndOrganizeAfterTimeout();\n return this.model.getVertZoom();\n }\n\n private doSetScroll(scroll_left: number, scroll_top: number) {\n // Update model\n scroll_left = Math.min(scroll_left, this.maxOncoprintScrollLeft());\n scroll_top = Math.min(scroll_top, this.maxOncoprintScrollTop());\n this.model.setScroll(scroll_left, scroll_top);\n // Update views\n\n this.cell_view.setScroll(this.model);\n this.header_view.setScroll(this.model);\n this.label_view.setScroll(this.model, this.getCellViewHeight);\n this.track_info_view.setScroll(this.model);\n this.track_options_view.setScroll(this.model);\n this.minimap_view.setScroll(this.model, this.cell_view);\n }\n\n private setDummyScrollDivScroll() {\n const scroll_left = this.model.getHorzScroll();\n const scroll_top = this.model.getVertScroll();\n\n const maximum_scroll_left = this.maxOncoprintScrollLeft();\n const maximum_scroll_top = this.maxOncoprintScrollTop();\n let onc_scroll_left_prop =\n maximum_scroll_left > 0 ? scroll_left / maximum_scroll_left : 0;\n let onc_scroll_top_prop =\n maximum_scroll_top > 0 ? scroll_top / maximum_scroll_top : 0;\n onc_scroll_left_prop = clamp(onc_scroll_left_prop, 0, 1);\n onc_scroll_top_prop = clamp(onc_scroll_top_prop, 0, 1);\n\n const maximum_dummy_scroll_div_scroll = this.maxDummyScrollDivScroll();\n const maximum_div_scroll_left = maximum_dummy_scroll_div_scroll.left;\n const maximum_div_scroll_top = maximum_dummy_scroll_div_scroll.top;\n\n this.target_dummy_scroll_left = Math.round(\n onc_scroll_left_prop * maximum_div_scroll_left\n );\n this.target_dummy_scroll_top = Math.round(\n onc_scroll_top_prop * maximum_div_scroll_top\n );\n this.$dummy_scroll_div.scrollLeft(this.target_dummy_scroll_left);\n this.$dummy_scroll_div.scrollTop(this.target_dummy_scroll_top);\n }\n\n public setScroll(scroll_left: number, scroll_top: number) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.doSetScroll(scroll_left, scroll_top);\n this.setDummyScrollDivScroll();\n }\n\n public setZoom(zoom_x: number, zoom_y: number) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n // Update model\n this.model.setZoom(zoom_x, zoom_y);\n // Update views\n this.cell_view.setZoom(this.model);\n this.header_view.render(this.model);\n this.label_view.setZoom(this.model, this.getCellViewHeight);\n this.track_info_view.setZoom(this.model, this.getCellViewHeight);\n this.track_options_view.setZoom(this.model, this.getCellViewHeight);\n this.minimap_view.setZoom(this.model, this.cell_view);\n }\n\n public setHorzScroll(s: number) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n // Update model\n this.model.setHorzScroll(Math.min(s, this.maxOncoprintScrollLeft()));\n // Update views\n this.cell_view.setHorzScroll(this.model);\n this.label_view.setHorzScroll(this.model);\n this.track_info_view.setHorzScroll(this.model);\n this.track_options_view.setHorzScroll(this.model);\n this.minimap_view.setHorzScroll(this.model, this.cell_view);\n // Update dummy scroll div\n this.setDummyScrollDivScroll();\n\n return this.model.getHorzScroll();\n }\n public setVertScroll(s: number) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n // Update model\n this.model.setVertScroll(Math.min(s, this.maxOncoprintScrollTop()));\n // Update views\n this.cell_view.setVertScroll(this.model);\n this.header_view.setVertScroll(this.model);\n this.label_view.setVertScroll(this.model, this.getCellViewHeight);\n this.track_info_view.setVertScroll(this.model);\n this.track_options_view.setVertScroll(this.model);\n this.minimap_view.setVertScroll(this.model, this.cell_view);\n // Update dummy scroll div\n this.setDummyScrollDivScroll();\n\n return this.model.getVertScroll();\n }\n public setViewport(vp: MinimapViewportSpec) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n // Zoom\n const zoom_x = this.model.getHorzZoomToFitCols(\n this.cell_view.getVisibleAreaWidth(),\n vp.left_col,\n vp.right_col\n );\n this.setZoom(zoom_x, vp.zoom_y);\n // Scroll\n const scroll_left = Math.min(\n this.model.getZoomedColumnLeft(\n this.model.getIdOrder()[vp.left_col]\n ),\n this.maxOncoprintScrollLeft()\n );\n const scroll_top = Math.min(\n vp.scroll_y_proportion * this.model.getOncoprintHeight(),\n this.maxOncoprintScrollTop()\n );\n this.setScroll(scroll_left, scroll_top);\n\n this.executeHorzZoomCallbacks();\n }\n\n public getTrackData(track_id: TrackId) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n return this.model.getTrackData(track_id);\n }\n\n public getTrackDataIdKey(track_id: TrackId) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n return this.model.getTrackDataIdKey(track_id);\n }\n\n /**\n * Sets the data for an Oncoprint track.\n *\n * @param track_id - the ID that identifies the track\n * @param {Object[]} data - the list of data for the cells\n * @param {string} data_id_key - name of the property of the\n * data objects to use as the (column) key\n */\n public setTrackData(\n track_id: TrackId,\n data: Datum[],\n data_id_key: string & keyof Datum\n ) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setTrackData(track_id, data, data_id_key);\n this.cell_view.setTrackData(this.model, track_id);\n this.header_view.render(this.model);\n this.legend_view.setTrackData(this.model);\n this.minimap_view.setTrackData(this.model, this.cell_view);\n\n if (\n this.model.keep_sorted &&\n this.model.isSortAffected(track_id, 'track')\n ) {\n this.sort();\n }\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public setTrackImportantIds(\n track_id: TrackId,\n ids: ColumnId[] | undefined\n ) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setTrackImportantIds(track_id, ids);\n this.cell_view.setTrackImportantIds(this.model, track_id);\n this.legend_view.setTrackImportantIds(this.model);\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public setTrackGroupSortPriority(priority: TrackGroupIndex[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setTrackGroupSortPriority(priority);\n this.cell_view.setTrackGroupSortPriority(this.model);\n\n if (this.model.keep_sorted) {\n this.sort();\n }\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public resetSortableTracksSortDirection() {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.resetSortableTracksSortDirection(true);\n\n if (this.model.keep_sorted) {\n this.sort();\n }\n }\n\n public setTrackSortDirection(track_id: TrackId, dir: TrackSortDirection) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n if (this.model.isTrackSortDirectionChangeable(track_id)) {\n this.model.setTrackSortDirection(track_id, dir);\n\n if (\n this.model.keep_sorted &&\n this.model.isSortAffected(track_id, 'track')\n ) {\n this.sort();\n }\n\n if (this.model.getTrackSortDirection(track_id) === 0) {\n if (this.model.getTrackShowGaps(track_id)) {\n this.setTrackShowGaps(track_id, false);\n }\n }\n }\n return this.model.getTrackSortDirection(track_id);\n }\n\n public setTrackSortComparator(\n track_id: TrackId,\n sortCmpFn: TrackSortSpecification<Datum>\n ) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setTrackSortComparator(track_id, sortCmpFn);\n if (\n this.model.keep_sorted &&\n this.model.isSortAffected(track_id, 'track')\n ) {\n this.sort();\n }\n }\n\n public getTrackSortDirection(track_id: TrackId) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n return this.model.getTrackSortDirection(track_id);\n }\n\n public setTrackInfo(track_id: TrackId, msg: string) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setTrackInfo(track_id, msg);\n this.track_info_view.setTrackInfo(this.model, this.getCellViewHeight);\n }\n\n public setTrackTooltipFn(\n track_id: TrackId,\n tooltipFn: TrackTooltipFn<Datum>\n ) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setTrackTooltipFn(track_id, tooltipFn);\n }\n\n public setShowTrackSublabels(show: boolean) {\n this.model.setShowTrackSublabels(show);\n this.label_view.setShowTrackSublabels(\n this.model,\n this.getCellViewHeight\n );\n\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public setTrackShowGaps(track_id: TrackId, showGaps: boolean) {\n this.model.setTrackShowGaps(track_id, showGaps);\n if (this.model.getTrackSortDirection(track_id) === 0 && showGaps) {\n this.setTrackSortDirection(track_id, 1);\n }\n this.track_options_view.setTrackShowGaps(\n this.model,\n this.getCellViewHeight\n );\n this.cell_view.setTrackShowGaps(this.model);\n }\n\n public sort() {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n const self = this;\n\n // Increment lastSortId in order to indicate that a new sort is initiated.\n this.incrementLastSortId();\n const thisSortId = this.lastSortId;\n\n this.model.sort().then(function(clusterSortResult) {\n // Make sure lastSortId is still the same as it was when we first called sort()\n // If not, then just skip updating.\n //\n // This prevents bugs due to stale sorts finishing asynchronously in the wrong order.\n if (self.lastSortId !== thisSortId) {\n return;\n }\n self.label_view.sort(self.model, self.getCellViewHeight);\n self.track_options_view.sort(self.model, self.getCellViewHeight);\n self.cell_view.sort(self.model);\n self.minimap_view.sort(self.model, self.cell_view);\n\n if (clusterSortResult) {\n self.setTrackGroupOrder(\n clusterSortResult.track_group_index,\n clusterSortResult.track_id_order,\n true\n );\n }\n });\n }\n\n public shareRuleSet(source_track_id: TrackId, target_track_id: TrackId) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.shareRuleSet(source_track_id, target_track_id);\n this.cell_view.shareRuleSet(this.model, target_track_id);\n this.legend_view.shareRuleSet(this.model);\n this.minimap_view.shareRuleSet(this.model, this.cell_view);\n }\n\n public setRuleSet(track_id: TrackId, rule_set_params: RuleSetParams) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setRuleSet(track_id, OncoprintRuleSet(rule_set_params));\n this.cell_view.setRuleSet(this.model, track_id);\n this.legend_view.setRuleSet(this.model);\n this.minimap_view.setRuleSet(this.model, this.cell_view);\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public setSortConfig(params: SortConfig) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setSortConfig(params);\n this.cell_view.setSortConfig(this.model);\n this.track_options_view.setSortConfig(this.model);\n\n if (this.model.keep_sorted) {\n this.sort();\n }\n }\n public setIdOrder(ids: ColumnId[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n // Update model\n this.model.setIdOrder(ids);\n // Update views\n this.cell_view.setIdOrder(this.model, ids);\n this.minimap_view.setIdOrder(this.model, this.cell_view);\n\n if (this.model.keep_sorted) {\n this.sort();\n }\n }\n\n public setTrackGroupHeader(\n index: TrackGroupIndex,\n header?: TrackGroupHeader\n ) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setTrackGroupHeader(index, header);\n this.label_view.setTrackGroupHeader(this.model, this.getCellViewHeight);\n this.header_view.render(this.model);\n this.track_info_view.setTrackGroupHeader(\n this.model,\n this.getCellViewHeight\n );\n this.track_options_view.setTrackGroupHeader(\n this.model,\n this.getCellViewHeight\n );\n this.minimap_view.setTrackGroupHeader(this.model, this.cell_view);\n this.cell_view.setTrackGroupHeader(this.model);\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public disableInteraction() {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n //this.label_view.disableInteraction();\n //this.cell_view.disableInteraction();\n this.track_options_view.disableInteraction();\n //this.track_info_view.disableInteraction();\n //this.legend_view.disableInteraction();\n }\n public enableInteraction() {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n //this.label_view.enableInteraction();\n //this.cell_view.enableInteraction();\n this.track_options_view.enableInteraction();\n //this.track_info_view.enableInteraction();\n //this.legend_view.enableInteraction();\n }\n public suppressRendering() {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.rendering_suppressed_depth += 1;\n this.label_view.suppressRendering();\n this.header_view.suppressRendering();\n this.cell_view.suppressRendering();\n this.track_options_view.suppressRendering();\n this.track_info_view.suppressRendering();\n this.legend_view.suppressRendering();\n this.minimap_view.suppressRendering();\n }\n\n public releaseRendering(onComplete?: () => void) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n if (this.model.rendering_suppressed_depth > 0) {\n this.model.rendering_suppressed_depth -= 1;\n this.model.rendering_suppressed_depth = Math.max(\n 0,\n this.model.rendering_suppressed_depth\n );\n if (this.model.rendering_suppressed_depth === 0) {\n this.model.releaseRendering();\n this.label_view.releaseRendering(\n this.model,\n this.getCellViewHeight\n );\n this.header_view.releaseRendering(this.model);\n this.cell_view.releaseRendering(this.model);\n this.track_options_view.releaseRendering(\n this.model,\n this.getCellViewHeight\n );\n this.track_info_view.releaseRendering(\n this.model,\n this.getCellViewHeight\n );\n this.legend_view.releaseRendering(this.model);\n this.minimap_view.releaseRendering(this.model, this.cell_view);\n this.resizeAndOrganizeAfterTimeout(onComplete);\n }\n }\n }\n\n public triggerPendingResizeAndOrganize(onComplete?: () => void) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n if (this.pending_resize_and_organize) {\n this.pending_resize_and_organize = false;\n this.resizeAndOrganizeAfterTimeout(onComplete);\n }\n }\n\n public hideIds(to_hide: ColumnId[], show_others?: boolean) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.hideIds(to_hide, show_others);\n this.cell_view.hideIds(this.model);\n this.minimap_view.hideIds(this.model, this.cell_view);\n }\n\n public hideTrackLegends(track_ids: TrackId[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n track_ids = [].concat(track_ids);\n this.model.hideTrackLegends(track_ids);\n this.legend_view.hideTrackLegends(this.model);\n this.setLegendTopAfterTimeout();\n }\n\n public showTrackLegends(track_ids: TrackId[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n track_ids = [].concat(track_ids);\n this.model.showTrackLegends(track_ids);\n this.legend_view.showTrackLegends(this.model);\n this.setLegendTopAfterTimeout();\n }\n\n public setCellPaddingOn(cell_padding_on: boolean) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setCellPaddingOn(cell_padding_on);\n this.cell_view.setCellPaddingOn(this.model);\n }\n\n public setTrackCustomOptions(\n track_id: TrackId,\n options: CustomTrackOption[] | undefined\n ) {\n this.model.setTrackCustomOptions(track_id, options);\n this.track_options_view.setTrackCustomOptions(this.model);\n }\n\n public setTrackInfoTooltip(\n track_id: TrackId,\n $tooltip_elt: JQuery | undefined\n ) {\n this.model.setTrackInfoTooltip(track_id, $tooltip_elt);\n }\n\n public setTrackMovable(track_id: TrackId, movable: boolean) {\n this.model.setTrackMovable(track_id, movable);\n this.track_options_view.setTrackMovable(this.model);\n this.label_view.setTrackMovable(this.model);\n }\n\n public setWidth(width: number) {\n this.width = width;\n\n this.resizeAndOrganize();\n }\n\n public setColumnLabels(labels: ColumnProp<ColumnLabel>) {\n this.model.setColumnLabels(labels);\n this.cell_view.setColumnLabels(this.model);\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public setShowTrackLabels(s: boolean) {\n this.model.setShowTrackLabels(s);\n this.label_view.setShowTrackLabels(this.model, this.getCellViewHeight);\n this.resizeAndOrganizeAfterTimeout();\n }\n\n public onCellMouseOver(callback: CellMouseOverCallback) {\n this.cell_mouse_over_callbacks.push(callback);\n }\n\n public onCellClick(callback: CellClickCallback) {\n this.cell_click_callbacks.push(callback);\n }\n\n public toSVG(with_background?: boolean) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n // Returns svg DOM element\n const root = svgfactory.svg(10, 10);\n this.$ctr.append(root);\n const everything_group = svgfactory.group(0, 0);\n root.appendChild(everything_group);\n\n const bgrect = svgfactory.bgrect(10, 10, [255, 255, 255, 1]);\n\n if (with_background) {\n everything_group.appendChild(bgrect);\n }\n\n const label_view_group = this.label_view.toSVGGroup(\n this.model,\n true,\n 0,\n 0\n );\n everything_group.appendChild(label_view_group);\n\n const header_view_group = this.header_view.toSVGGroup(this.model, 0, 0);\n everything_group.appendChild(header_view_group);\n\n const label_view_width = label_view_group.getBBox().width;\n const label_view_padding = label_view_width > 0 ? 30 : 0;\n const track_info_group_x = label_view_width + label_view_padding;\n const track_info_group = this.track_info_view.toSVGGroup(\n this.model,\n track_info_group_x,\n 0\n );\n everything_group.appendChild(track_info_group);\n\n const cell_view_group_x =\n track_info_group_x + track_info_group.getBBox().width + 10;\n const cell_view_group = this.cell_view.toSVGGroup(\n this.model,\n cell_view_group_x,\n 0\n );\n everything_group.appendChild(cell_view_group);\n\n everything_group.appendChild(\n this.legend_view.toSVGGroup(\n this.model,\n 0,\n cell_view_group.getBBox().y +\n cell_view_group.getBBox().height +\n 20\n )\n );\n\n const everything_box = everything_group.getBBox();\n const everything_width = everything_box.x + everything_box.width;\n const everything_height = everything_box.y + everything_box.height;\n root.setAttribute('width', everything_width as any);\n root.setAttribute('height', everything_height as any);\n\n if (with_background) {\n bgrect.setAttribute('width', everything_width as any);\n bgrect.setAttribute('height', everything_height as any);\n }\n root.parentNode.removeChild(root);\n\n return root;\n }\n\n public toCanvas(\n callback: (canvas: HTMLCanvasElement, truncated: boolean) => void,\n resolution?: number\n ) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n // Returns data url, requires IE >= 11\n\n const MAX_CANVAS_SIDE = 8192;\n const svg = this.toSVG(true);\n svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n const width = parseInt(svg.getAttribute('width'), 10);\n const height = parseInt(svg.getAttribute('height'), 10);\n const canvas = document.createElement('canvas');\n\n resolution = resolution || 1;\n const truncated =\n width * resolution > MAX_CANVAS_SIDE ||\n height * resolution > MAX_CANVAS_SIDE;\n canvas.setAttribute(\n 'width',\n Math.min(MAX_CANVAS_SIDE, width * resolution).toString()\n );\n canvas.setAttribute(\n 'height',\n Math.min(MAX_CANVAS_SIDE, height * resolution).toString()\n );\n\n const container = document.createElement('div');\n container.appendChild(svg);\n const svg_data_str = container.innerHTML;\n const svg_data_uri =\n 'data:image/svg+xml;base64,' + window.btoa(svg_data_str);\n\n const ctx = canvas.getContext('2d');\n ctx.setTransform(resolution, 0, 0, resolution, 0, 0);\n const img = new Image();\n\n img.onload = function() {\n ctx.drawImage(img, 0, 0);\n callback(canvas, truncated);\n };\n img.onerror = function() {\n console.log('IMAGE LOAD ERROR');\n };\n\n img.src = svg_data_uri;\n return img;\n }\n\n public toDataUrl(callback: (dataURL: string) => void) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.toCanvas(function(canvas) {\n callback(canvas.toDataURL());\n });\n }\n\n public highlightTrackLabelOnly(track_id: TrackId) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.label_view.highlightTrackLabelOnly(track_id, this.model);\n }\n\n public setHighlightedTracks(track_ids: TrackId[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setHighlightedTracks(track_ids);\n this.label_view.setHighlightedTracks(this.model);\n this.cell_view.setHighlightedTracks(this.model);\n }\n\n public setHighlightedIds(ids: ColumnId[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.model.setHighlightedIds(ids);\n this.cell_view.setHighlightedIds(this.model);\n }\n\n public getIdOrder(all?: boolean) {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n return this.model.getIdOrder(all);\n }\n\n public setIdClipboardContents(array: ColumnId[]) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.id_clipboard = array.slice();\n for (let i = 0; i < this.clipboard_change_callbacks.length; i++) {\n this.clipboard_change_callbacks[i](array);\n }\n }\n public getIdClipboardContents() {\n if (this.webgl_unavailable || this.destroyed) {\n return undefined;\n }\n return this.id_clipboard.slice();\n }\n public onClipboardChange(callback: ClipboardChangeCallback) {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.clipboard_change_callbacks.push(callback);\n }\n\n public destroy() {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.cell_view.destroy();\n this.header_view.destroy();\n this.track_options_view.destroy();\n this.track_info_view.destroy();\n this.destroyed = true;\n }\n\n public clearMouseOverEffects() {\n if (this.webgl_unavailable || this.destroyed) {\n return;\n }\n this.cell_view.clearOverlay();\n this.label_view.highlightTrackLabelOnly(null, this.model);\n }\n}\n"],"names":["ClusteringWorker","clamp","BucketSort.bucketSort","BucketSort.compareFull","$","makeSVGElement","makeIdCounter","makeSvgElement","img","TOGGLE_BTN_CLASS","TOGGLE_BTN_OPEN_CLASS","DROPDOWN_CLASS","SEPARATOR_CLASS","NTH_CLASS_PREFIX","CLOSE_MENUS_EVENT","TRACK_OPTIONS_VIEW_CLOSE_MENUS_EVENT","menuDotsIcon","HEADER_VIEW_CLOSE_MENUS_EVENT","zoomToFitIcon"],"mappings":"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"}
|