{"version":3,"file":"kendo.dataviz.treemap.min.js","names":["factory","define","amd","$","undefined$1","math","Math","isArray","Array","kendo","window","outerHeight","_outerHeight","outerWidth","_outerWidth","Class","Widget","ui","template","deepExtend","HierarchicalDataSource","data","getter","dataviz","NS","CHANGE","DATA_BOUND","ITEM_CREATED","MAX_VALUE","Number","TreeMap","extend","init","element","options","destroy","empty","fn","call","this","wrapper","_initTheme","addClass","_setLayout","_originalOptions","_initDataSource","_attachEvents","notify","name","theme","autoBind","textField","valueField","colorField","events","themeOptions","themes","toLowerCase","treeMap","on","_mouseover","bind","_mouseleave","_resizeHandler","resize","onResize","type","_layout","SliceAndDice","_view","SliceAndDiceView","Squarified","SquarifiedView","that","dataSource","_dataChangeHandler","_onDataChange","create","fetch","setDataSource","unbind","e","item","i","node","items","length","root","_getByUid","uid","children","Query","_sortForGrouping","push","_wrapItem","htmlSize","compute","coord","_setColors","render","_cleanItems","createRoot","_root","_colorIdx","load","trigger","angular","elements","find","colorRange","colors","color","min","max","minRGBtoDecimal","rgbToDecimal","maxRGBtoDecimal","isDarker","colorBrightness","rgbColor","r","colorByIndex","g","b","buildColorFromRGB","colorsByLength","leafNodes","defined","dataItem","hasChildren","_contentSize","view","renderHeight","wrap","value","getField","text","level","pop","concat","attr","getByUid","findByUid","target","hasClass","_removeActiveState","removeClass","off","unbindResize","getSize","dimensions","_resize","rootElement","width","height","css","_resizeItems","child","childElement","titleSize","idx","filter","setItemSize","setOptions","_setEvents","top","left","leaf","tree","layoutChildren","parentArea","totalArea","itemsArea","parseFloat","area","minimumSideValue","layoutHorizontal","firstElement","tail","slice","squarify","initElement","computeDim","worstAspectRatio","newCoords","layoutRow","dim","layoutLast","w","layoutV","layoutH","orientation","layoutVertical","layoutChange","areaSum","maxArea","minArea","rootCoord","newRootCoord","round","_totalArea","ans","total","offset","_clean","_getText","title","_createTitle","append","_compile","_createWrap","innerWidth","rootWrap","htmlElement","_createLeaf","_createTile","toggleClass","_tileColorBrightness","toggle","html","tile","_itemCoordinates","coordinates","_renderTemplate","titleTemplate","vertical","quotient","sliceAndDice","field","row","get","index","minColor","abs","maxColor","currentStep","decimalToRgb","colorLength","substring","colorToRGB","replace","rgbToHex","number","result","toString","toUpperCase","rgb","parseInt","brightness","sqrt","power","pow","plugin","jQuery"],"sources":["kendo.dataviz.treemap.js"],"mappings":"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","sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(['kendo.data', 'kendo.userevents', 'kendo.dataviz.themes'], factory) :\n factory();\n})((function () {\n var __meta__ = {\n id: \"dataviz.treeMap\",\n name: \"TreeMap\",\n category: \"dataviz\",\n description: \"The Kendo DataViz TreeMap\",\n depends: [ \"data\", \"userevents\", \"dataviz.themes\" ]\n };\n\n (function($, undefined$1) {\n var math = Math,\n\n isArray = Array.isArray,\n\n kendo = window.kendo,\n outerHeight = kendo._outerHeight,\n outerWidth = kendo._outerWidth,\n Class = kendo.Class,\n Widget = kendo.ui.Widget,\n template = kendo.template,\n deepExtend = kendo.deepExtend,\n HierarchicalDataSource = kendo.data.HierarchicalDataSource,\n getter = kendo.getter,\n\n dataviz = kendo.dataviz;\n\n var NS = \".kendoTreeMap\",\n CHANGE = \"change\",\n DATA_BOUND = \"dataBound\",\n ITEM_CREATED = \"itemCreated\",\n MAX_VALUE = Number.MAX_VALUE,\n MOUSEOVER_NS = \"mouseover\" + NS,\n MOUSELEAVE_NS = \"mouseleave\" + NS,\n UNDEFINED = \"undefined\";\n\n var TreeMap = Widget.extend({\n init: function(element, options) {\n kendo.destroy(element);\n $(element).empty();\n\n Widget.fn.init.call(this, element, options);\n this.wrapper = this.element;\n\n this._initTheme(this.options);\n\n this.element.addClass(\"k-widget k-treemap\");\n\n this._setLayout();\n\n this._originalOptions = deepExtend({}, this.options);\n\n this._initDataSource();\n\n this._attachEvents();\n\n kendo.notify(this, dataviz.ui);\n },\n\n options: {\n name: \"TreeMap\",\n theme: \"default\",\n autoBind: true,\n textField: \"text\",\n valueField: \"value\",\n colorField: \"color\"\n },\n\n events: [DATA_BOUND, ITEM_CREATED],\n\n _initTheme: function(options) {\n var that = this,\n themes = dataviz.ui.themes || {},\n themeName = ((options || {}).theme || \"\").toLowerCase(),\n themeOptions = (themes[themeName] || {}).treeMap;\n\n that.options = deepExtend({}, themeOptions, options);\n },\n\n _attachEvents: function() {\n this.element\n .on(MOUSEOVER_NS, this._mouseover.bind(this))\n .on(MOUSELEAVE_NS, this._mouseleave.bind(this));\n\n this._resizeHandler = this.resize.bind(this, false);\n kendo.onResize(this._resizeHandler);\n },\n\n _setLayout: function() {\n if (this.options.type === \"horizontal\") {\n this._layout = new SliceAndDice(false);\n this._view = new SliceAndDiceView(this, this.options);\n } else if (this.options.type === \"vertical\") {\n this._layout = new SliceAndDice(true);\n this._view = new SliceAndDiceView(this, this.options);\n } else {\n this._layout = new Squarified();\n this._view = new SquarifiedView(this, this.options);\n }\n },\n\n _initDataSource: function() {\n var that = this,\n options = that.options,\n dataSource = options.dataSource;\n\n that._dataChangeHandler = that._onDataChange.bind(that);\n\n that.dataSource = HierarchicalDataSource\n .create(dataSource)\n .bind(CHANGE, that._dataChangeHandler);\n\n if (dataSource) {\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n }\n },\n\n setDataSource: function(dataSource) {\n var that = this;\n that.dataSource.unbind(CHANGE, that._dataChangeHandler);\n that.dataSource = dataSource\n .bind(CHANGE, that._dataChangeHandler);\n\n if (dataSource) {\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n }\n },\n\n _onDataChange: function(e) {\n var node = e.node;\n var items = e.items;\n var options = this.options;\n var item, i;\n\n if (!node) {\n this._cleanItems();\n this.element.empty();\n item = this._wrapItem(items[0]);\n this._layout.createRoot(\n item,\n outerWidth(this.element),\n outerHeight(this.element),\n this.options.type === \"vertical\"\n );\n this._view.createRoot(item);\n // Reference of the root\n this._root = item;\n this._colorIdx = 0;\n } else {\n if (items.length) {\n var root = this._getByUid(node.uid);\n root.children = [];\n items = new kendo.data.Query(items)._sortForGrouping(options.valueField, \"desc\");\n\n for (i = 0; i < items.length; i++) {\n item = items[i];\n root.children.push(this._wrapItem(item));\n }\n\n var htmlSize = this._view.htmlSize(root);\n this._layout.compute(root.children, root.coord, htmlSize);\n\n this._setColors(root.children);\n this._view.render(root);\n }\n }\n\n for (i = 0; i < items.length; i++) {\n items[i].load();\n }\n\n if (node) {\n this.trigger(DATA_BOUND, {\n node: node\n });\n }\n },\n\n _cleanItems: function() {\n var that = this;\n that.angular(\"cleanup\", function() {\n return { elements: that.element.find(\".k-leaf div,.k-treemap-title,.k-treemap-title-vertical\") };\n });\n },\n\n _setColors: function(items) {\n var colors = this.options.colors;\n var colorIdx = this._colorIdx;\n var color = colors[colorIdx % colors.length];\n var colorRange, item;\n if (isArray(color)) {\n colorRange = colorsByLength(color[0], color[1], items.length);\n }\n\n var leafNodes = false;\n for (var i = 0; i < items.length; i++) {\n item = items[i];\n\n if (!defined(item.color)) {\n if (colorRange) {\n item.color = colorRange[i];\n } else {\n item.color = color;\n }\n }\n if (!item.dataItem.hasChildren) {\n leafNodes = true;\n }\n }\n\n if (leafNodes) {\n this._colorIdx++;\n }\n },\n\n _contentSize: function(root) {\n this.view.renderHeight(root);\n },\n\n _wrapItem: function(item) {\n var wrap = {};\n\n if (defined(this.options.valueField)) {\n wrap.value = getField(this.options.valueField, item);\n }\n\n if (defined(this.options.colorField)) {\n wrap.color = getField(this.options.colorField, item);\n }\n\n if (defined(this.options.textField)) {\n wrap.text = getField(this.options.textField, item);\n }\n\n wrap.level = item.level();\n\n wrap.dataItem = item;\n\n return wrap;\n },\n\n _getByUid: function(uid) {\n var items = [this._root];\n var item;\n\n while (items.length) {\n item = items.pop();\n if (item.dataItem.uid === uid) {\n return item;\n }\n\n if (item.children) {\n items = items.concat(item.children);\n }\n }\n },\n\n dataItem: function(node) {\n var uid = $(node).attr(kendo.attr(\"uid\")),\n dataSource = this.dataSource;\n\n return dataSource && dataSource.getByUid(uid);\n },\n\n findByUid: function(uid) {\n return this.element.find(\".k-treemap-tile[\" + kendo.attr(\"uid\") + \"='\" + uid + \"']\");\n },\n\n _mouseover: function(e) {\n var target = $(e.target);\n if (target.hasClass(\"k-leaf\")) {\n this._removeActiveState();\n target\n .removeClass(\"k-hover\")\n .addClass(\"k-hover\");\n }\n },\n\n _removeActiveState: function() {\n this.element\n .find(\".k-hover\")\n .removeClass(\"k-hover\");\n },\n\n _mouseleave: function() {\n this._removeActiveState();\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n\n if (this.dataSource) {\n this.dataSource.unbind(CHANGE, this._dataChangeHandler);\n }\n\n this._root = null;\n kendo.unbindResize(this._resizeHandler);\n\n kendo.destroy(this.element);\n },\n\n items: function() {\n return $();\n },\n\n getSize: function() {\n return kendo.dimensions(this.element);\n },\n\n _resize: function() {\n var root = this._root;\n if (root) {\n var element = this.element;\n var rootElement = element.children();\n root.coord.width = outerWidth(element);\n root.coord.height = outerHeight(element);\n\n rootElement.css({\n width: root.coord.width,\n height: root.coord.height\n });\n\n this._resizeItems(root, rootElement);\n }\n },\n\n _resizeItems: function(root, element) {\n if (root.children && root.children.length) {\n var elements = element.children(\".k-treemap-wrap\").children();\n var child, childElement;\n\n this._layout.compute(root.children, root.coord, { text: this._view.titleSize(root, element) });\n for (var idx = 0; idx < root.children.length; idx++) {\n child = root.children[idx];\n childElement = elements.filter(\"[\" + kendo.attr(\"uid\") + \"='\" + child.dataItem.uid + \"']\");\n this._view.setItemSize(child, childElement);\n this._resizeItems(child, childElement);\n }\n }\n },\n\n setOptions: function(options) {\n var dataSource = options.dataSource;\n\n options.dataSource = undefined$1;\n this._originalOptions = deepExtend(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions);\n this._setLayout();\n this._initTheme(this.options);\n\n Widget.fn._setEvents.call(this, options);\n\n if (dataSource) {\n this.setDataSource(HierarchicalDataSource.create(dataSource));\n }\n\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n }\n });\n\n var Squarified = Class.extend({\n createRoot: function(root, width, height) {\n root.coord = {\n width: width,\n height: height,\n top: 0,\n left: 0\n };\n },\n\n leaf: function(tree) {\n return !tree.children;\n },\n\n layoutChildren: function(items, coord) {\n var parentArea = coord.width * coord.height;\n var totalArea = 0,\n itemsArea = [],\n i;\n\n for (i = 0; i < items.length; i++) {\n itemsArea[i] = parseFloat(items[i].value);\n totalArea += itemsArea[i];\n }\n\n for (i = 0; i < itemsArea.length; i++) {\n items[i].area = parentArea * itemsArea[i] / totalArea;\n }\n\n var minimumSideValue = this.layoutHorizontal() ? coord.height : coord.width;\n\n var firstElement = [items[0]];\n var tail = items.slice(1);\n this.squarify(tail, firstElement, minimumSideValue, coord);\n },\n\n squarify: function(tail, initElement, width, coord) {\n this.computeDim(tail, initElement, width, coord);\n },\n\n computeDim: function(tail, initElement, width, coord) {\n if (tail.length + initElement.length == 1) {\n var element = tail.length == 1 ? tail : initElement;\n this.layoutLast(element, width, coord);\n return;\n }\n\n if (tail.length >= 2 && initElement.length === 0) {\n initElement = [tail[0]];\n tail = tail.slice(1);\n }\n\n if (tail.length === 0) {\n if (initElement.length > 0) {\n this.layoutRow(initElement, width, coord);\n }\n return;\n }\n\n var firstElement = tail[0];\n\n if (this.worstAspectRatio(initElement, width) >= this.worstAspectRatio([firstElement].concat(initElement), width)) {\n this.computeDim(tail.slice(1), initElement.concat([firstElement]), width, coord);\n } else {\n var newCoords = this.layoutRow(initElement, width, coord);\n this.computeDim(tail, [], newCoords.dim, newCoords);\n }\n },\n\n layoutLast: function(items, w, coord) {\n items[0].coord = coord;\n },\n\n layoutRow: function(items, width, coord) {\n if (this.layoutHorizontal()) {\n return this.layoutV(items, width, coord);\n } else {\n return this.layoutH(items, width, coord);\n }\n },\n\n orientation: \"h\",\n\n layoutVertical: function() {\n return this.orientation === \"v\";\n },\n\n layoutHorizontal: function() {\n return this.orientation === \"h\";\n },\n\n layoutChange: function() {\n this.orientation = this.layoutVertical() ? \"h\" : \"v\";\n },\n\n worstAspectRatio: function(items, width) {\n if (!items || items.length === 0) {\n return MAX_VALUE;\n }\n\n var areaSum = 0,\n maxArea = 0,\n minArea = MAX_VALUE;\n\n for (var i = 0; i < items.length; i++) {\n var area = items[i].area;\n areaSum += area;\n minArea = (minArea < area) ? minArea : area;\n maxArea = (maxArea > area) ? maxArea : area;\n }\n\n return math.max(\n (width * width * maxArea) / (areaSum * areaSum),\n (areaSum * areaSum) / (width * width * minArea)\n );\n },\n\n compute: function(children, rootCoord, htmlSize) {\n if (!(rootCoord.width >= rootCoord.height && this.layoutHorizontal())) {\n this.layoutChange();\n }\n\n if (children && children.length > 0) {\n var newRootCoord = {\n width: rootCoord.width,\n height: rootCoord.height - htmlSize.text,\n top: 0,\n left: 0\n };\n\n this.layoutChildren(children, newRootCoord);\n }\n },\n\n layoutV: function(items, width, coord) {\n var totalArea = this._totalArea(items),\n top = 0;\n\n width = round(totalArea / width);\n\n for (var i = 0; i < items.length; i++) {\n var height = round(items[i].area / width);\n items[i].coord = {\n height: height,\n width: width,\n top: coord.top + top,\n left: coord.left\n };\n\n top += height;\n }\n\n var ans = {\n height: coord.height,\n width: coord.width - width,\n top: coord.top,\n left: coord.left + width\n };\n\n ans.dim = math.min(ans.width, ans.height);\n\n if (ans.dim != ans.height) {\n this.layoutChange();\n }\n\n return ans;\n },\n\n layoutH: function(items, width, coord) {\n var totalArea = this._totalArea(items);\n\n var height = round(totalArea / width),\n top = coord.top,\n left = 0;\n\n for (var i = 0; i < items.length; i++) {\n items[i].coord = {\n height: height,\n width: round(items[i].area / height),\n top: top,\n left: coord.left + left\n };\n left += items[i].coord.width;\n }\n\n var ans = {\n height: coord.height - height,\n width: coord.width,\n top: coord.top + height,\n left: coord.left\n };\n\n ans.dim = math.min(ans.width, ans.height);\n\n if (ans.dim != ans.width) {\n this.layoutChange();\n }\n\n return ans;\n },\n\n _totalArea: function(items) {\n var total = 0;\n\n for (var i = 0; i < items.length; i++) {\n total += items[i].area;\n }\n\n return total;\n }\n });\n\n var SquarifiedView = Class.extend({\n init: function(treeMap, options) {\n this.options = deepExtend({}, this.options, options);\n this.treeMap = treeMap;\n this.element = $(treeMap.element);\n\n this.offset = 0;\n },\n\n titleSize: function(item, element) {\n var text = element.children(\".k-treemap-title\");\n return text.height() || 0;\n },\n\n htmlSize: function(root) {\n var rootElement = this._getByUid(root.dataItem.uid);\n var htmlSize = {\n text: 0\n };\n\n if (root.children) {\n this._clean(rootElement);\n\n var text = this._getText(root);\n if (text) {\n var title = this._createTitle(root);\n rootElement.append(title);\n\n this._compile(title, root.dataItem);\n\n htmlSize.text = title.height();\n }\n\n rootElement.append(this._createWrap());\n\n this.offset = (outerWidth(rootElement) - rootElement.innerWidth()) / 2;\n }\n\n return htmlSize;\n },\n\n _compile: function(element, dataItem) {\n this.treeMap.angular(\"compile\", function() {\n return {\n elements: element,\n data: [ { dataItem: dataItem } ]\n };\n });\n },\n\n _getByUid: function(uid) {\n return this.element.find(\".k-treemap-tile[\" + kendo.attr(\"uid\") + \"='\" + uid + \"']\");\n },\n\n render: function(root) {\n var rootElement = this._getByUid(root.dataItem.uid);\n var children = root.children;\n if (children) {\n var rootWrap = rootElement.find(\".k-treemap-wrap\");\n\n for (var i = 0; i < children.length; i++) {\n var leaf = children[i];\n var htmlElement = this._createLeaf(leaf);\n rootWrap.append(htmlElement);\n\n this._compile(htmlElement.children(), leaf.dataItem);\n\n this.treeMap.trigger(ITEM_CREATED, {\n element: htmlElement\n });\n }\n }\n },\n\n createRoot: function(root) {\n var htmlElement = this._createLeaf(root);\n this.element.append(htmlElement);\n this._compile(htmlElement.children(), root.dataItem);\n\n this.treeMap.trigger(ITEM_CREATED, {\n element: htmlElement\n });\n },\n\n _clean: function(root) {\n this.treeMap.angular(\"cleanup\", function() {\n return {\n elements: root.children(\":not(.k-treemap-wrap)\")\n };\n });\n\n root.css(\"background-color\", \"\");\n root.removeClass(\"k-leaf\");\n root.removeClass(\"k-inverse\");\n root.empty();\n },\n\n _createLeaf: function(item) {\n return this._createTile(item)\n .css(\"background-color\", item.color)\n .addClass(\"k-leaf\")\n .toggleClass(\n \"k-inverse\",\n this._tileColorBrightness(item) > 180\n )\n .toggle(item.value !== 0)\n .append($(\"
\")\n .html(this._getText(item)));\n },\n\n _createTile: function(item) {\n var tile = $(\"\");\n this.setItemSize(item, tile);\n\n if (defined(item.dataItem) && defined(item.dataItem.uid)) {\n tile.attr(kendo.attr(\"uid\"), item.dataItem.uid);\n }\n\n return tile;\n },\n\n _itemCoordinates: function(item) {\n var coordinates = {\n width: item.coord.width,\n height: item.coord.height,\n left: item.coord.left,\n top: item.coord.top\n };\n\n if (coordinates.left && this.offset) {\n coordinates.width += this.offset * 2;\n } else {\n coordinates.width += this.offset;\n }\n\n if (coordinates.top) {\n coordinates.height += this.offset * 2;\n } else {\n coordinates.height += this.offset;\n }\n\n return coordinates;\n },\n\n setItemSize: function(item, element) {\n var coordinates = this._itemCoordinates(item);\n element.css({\n width: coordinates.width,\n height: coordinates.height,\n left: coordinates.left,\n top: coordinates.top\n });\n },\n\n _getText: function(item) {\n var text = item.text;\n\n if (this.options.template) {\n text = this._renderTemplate(item);\n }\n\n return text;\n },\n\n _renderTemplate: function(item) {\n var titleTemplate = template(this.options.template);\n return titleTemplate({\n dataItem: item.dataItem,\n text: item.text\n });\n },\n\n _createTitle: function(item) {\n return $(\"\")\n .append($(\"\").html(this._getText(item)));\n },\n\n _createWrap: function() {\n return $(\"\");\n },\n\n _tileColorBrightness: function(item) {\n return colorBrightness(item.color);\n }\n });\n\n var SliceAndDice = Class.extend({\n createRoot: function(root, width, height, vertical) {\n root.coord = {\n width: width,\n height: height,\n top: 0,\n left: 0\n };\n root.vertical = vertical;\n },\n\n init: function(vertical) {\n this.vertical = vertical;\n this.quotient = vertical ? 1 : 0;\n },\n\n compute: function(children, rootCoord, htmlSize) {\n\n if (children.length > 0) {\n var width = rootCoord.width;\n var height = rootCoord.height;\n\n if (this.vertical) {\n height -= htmlSize.text;\n } else {\n width -= htmlSize.text;\n }\n\n var newRootCoord = {\n width: width,\n height: height,\n top: 0,\n left: 0\n };\n\n this.layoutChildren(children, newRootCoord);\n }\n },\n\n layoutChildren: function(items, coord) {\n var parentArea = coord.width * coord.height;\n var totalArea = 0;\n var itemsArea = [];\n var i;\n\n for (i = 0; i < items.length; i++) {\n var item = items[i];\n itemsArea[i] = parseFloat(items[i].value);\n totalArea += itemsArea[i];\n item.vertical = this.vertical;\n }\n\n for (i = 0; i < itemsArea.length; i++) {\n items[i].area = parentArea * itemsArea[i] / totalArea;\n }\n\n this.sliceAndDice(items, coord);\n },\n\n sliceAndDice: function(items, coord) {\n var totalArea = this._totalArea(items);\n if (items[0].level % 2 === this.quotient) {\n this.layoutHorizontal(items, coord, totalArea);\n } else {\n this.layoutVertical(items, coord, totalArea);\n }\n },\n\n layoutHorizontal: function(items, coord, totalArea) {\n var left = 0;\n\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var width = item.area / (totalArea / coord.width);\n item.coord = {\n height: coord.height,\n width: width,\n top: coord.top,\n left: coord.left + left\n };\n\n left += width;\n }\n },\n\n layoutVertical: function(items, coord, totalArea) {\n var top = 0;\n\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var height = item.area / (totalArea / coord.height);\n item.coord = {\n height: height,\n width: coord.width,\n top: coord.top + top,\n left: coord.left\n };\n\n top += height;\n }\n },\n\n _totalArea: function(items) {\n var total = 0;\n\n for (var i = 0; i < items.length; i++) {\n total += items[i].area;\n }\n\n return total;\n }\n });\n\n var SliceAndDiceView = SquarifiedView.extend({\n htmlSize: function(root) {\n var rootElement = this._getByUid(root.dataItem.uid);\n var htmlSize = {\n text: 0,\n offset: 0\n };\n\n if (root.children) {\n this._clean(rootElement);\n\n var text = this._getText(root);\n if (text) {\n var title = this._createTitle(root);\n rootElement.append(title);\n this._compile(title, root.dataItem);\n\n if (root.vertical) {\n htmlSize.text = title.height();\n } else {\n htmlSize.text = title.width();\n }\n }\n\n rootElement.append(this._createWrap());\n\n this.offset = (outerWidth(rootElement) - rootElement.innerWidth()) / 2;\n }\n\n return htmlSize;\n },\n\n titleSize: function(item, element) {\n var size;\n if (item.vertical) {\n size = element.children(\".k-treemap-title\").height();\n } else {\n size = element.children(\".k-treemap-title-vertical\").width();\n }\n return size || 0;\n },\n\n _createTitle: function(item) {\n var title;\n if (item.vertical) {\n title = $(\"\");\n } else {\n title = $(\"\");\n }\n\n return title.append($(\"\").html(this._getText(item)));\n }\n });\n\n function getField(field, row) {\n if (row === null) {\n return row;\n }\n\n var get = getter(field, true);\n return get(row);\n }\n\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n\n function colorsByLength(min, max, length) {\n var minRGBtoDecimal = rgbToDecimal(min);\n var maxRGBtoDecimal = rgbToDecimal(max);\n var isDarker = colorBrightness(min) - colorBrightness(max) < 0;\n var colors = [];\n\n colors.push(min);\n\n for (var i = 0; i < length; i++) {\n var rgbColor = {\n r: colorByIndex(minRGBtoDecimal.r, maxRGBtoDecimal.r, i, length, isDarker),\n g: colorByIndex(minRGBtoDecimal.g, maxRGBtoDecimal.g, i, length, isDarker),\n b: colorByIndex(minRGBtoDecimal.b, maxRGBtoDecimal.b, i, length, isDarker)\n };\n colors.push(buildColorFromRGB(rgbColor));\n }\n\n colors.push(max);\n\n return colors;\n }\n\n function colorByIndex(min, max, index, length, isDarker) {\n var minColor = math.min(math.abs(min), math.abs(max));\n var maxColor = math.max(math.abs(min), math.abs(max));\n var step = (maxColor - minColor) / (length + 1);\n var currentStep = step * (index + 1);\n var color;\n\n if (isDarker) {\n color = minColor + currentStep;\n } else {\n color = maxColor - currentStep;\n }\n\n return color;\n }\n\n function buildColorFromRGB(color) {\n return \"#\" + decimalToRgb(color.r) + decimalToRgb(color.g) + decimalToRgb(color.b);\n }\n\n function rgbToDecimal(color) {\n color = color.replace(\"#\", \"\");\n var rgbColor = colorToRGB(color);\n\n return {\n r: rgbToHex(rgbColor.r),\n g: rgbToHex(rgbColor.g),\n b: rgbToHex(rgbColor.b)\n };\n }\n\n function decimalToRgb(number) {\n var result = math.round(number).toString(16).toUpperCase();\n\n if (result.length === 1) {\n result = \"0\" + result;\n }\n\n return result;\n }\n\n function colorToRGB(color) {\n var colorLength = color.length;\n var rgbColor = {};\n if (colorLength === 3) {\n rgbColor.r = color[0];\n rgbColor.g = color[1];\n rgbColor.b = color[2];\n } else {\n rgbColor.r = color.substring(0, 2);\n rgbColor.g = color.substring(2, 4);\n rgbColor.b = color.substring(4, 6);\n }\n\n return rgbColor;\n }\n\n function rgbToHex(rgb) {\n return parseInt(rgb.toString(16), 16);\n }\n\n function colorBrightness(color) {\n var brightness = 0;\n if (color) {\n color = rgbToDecimal(color);\n brightness = math.sqrt(0.241 * color.r * color.r + 0.691 * color.g * color.g + 0.068 * color.b * color.b);\n }\n\n return brightness;\n }\n\n function round(value) {\n var power = math.pow(10, 4);\n return math.round(value * power) / power;\n }\n\n dataviz.ui.plugin(TreeMap);\n\n })(window.kendo.jQuery);\n\n}));\n"]}