{"version":3,"sources":["jsdelivr-header.js","/npm/@kalisio/leaflet.donutcluster@1.1.0/src/Leaflet.DonutCluster.js"],"names":[],"mappings":"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","file":"/npm/@kalisio/leaflet.donutcluster@1.1.0/src/Leaflet.DonutCluster.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@kalisio/leaflet.donutcluster@1.1.0/src/Leaflet.DonutCluster.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict';\r\n(function (factory, window) {\r\n    /*globals define, module, require*/\r\n\r\n    // define an AMD module that relies on 'leaflet'\r\n    if (typeof define === 'function' && define.amd) {\r\n        define(['leaflet'], factory);\r\n\r\n\r\n    // define a Common JS module that relies on 'leaflet'\r\n    } else if (typeof exports === 'object') {\r\n        module.exports = factory(require('leaflet'));\r\n    }\r\n\r\n    // attach your plugin to the global 'L' variable\r\n    if(typeof window !== 'undefined' && window.L){\r\n        factory(window.L);\r\n    }\r\n\r\n}(function (L) {\r\n    function roundToTwo(num) {\r\n        return +(Math.round(num + \"e+2\") + \"e-2\");\r\n    }\r\n\r\n    function readable(val) {\r\n        if (val >= 1000 && val < 1000000)\r\n            val = roundToTwo(val / 1000) + 'K'\r\n        else if (val >= 1000000 && val < 1000000000)\r\n            val = roundToTwo(val / 1000000) + 'M'\r\n        else if (val >= 1000000000)\r\n            val = roundToTwo(val / 1000000000) + 'B'\r\n        else if (typeof val === 'number') val = val.toFixed(0)\r\n        return val\r\n    }\r\n    var doc = document,\r\n        M = Math,\r\n        donutData = {},\r\n        dataIndex = 0;\r\n\r\n    function donut(options) {\r\n        var div = doc.createElement('div'),\r\n            size = options.size || 100,\r\n            size0 = size + 10,\r\n            data = options.data || [{\r\n                name: 'default', value: 1, total: 1\r\n            }],\r\n            templateContext = { data: {} },\r\n            weight = options.weight || 20,\r\n            colors = options.colors,\r\n            fillColor = options.fillColor || '#f1d357',\r\n            opacity = options.opacity || 0.7,\r\n            el = options.el,\r\n            format = options.format || readable,\r\n            r = size / 2,\r\n            PI = M.PI,\r\n            sin = M.sin,\r\n            cos = M.cos,\r\n            sum = 0,\r\n            total = 0,\r\n            i,\r\n            value,\r\n            arc,\r\n            text,\r\n            legend,\r\n            getLegend = options.getLegend || function (title, color, percentage, value) {\r\n                var className = options.legendClassName || 'donut-legend'\r\n                var legend = `${title}:&nbsp;`\r\n                if (options.legendContent === 'percentage') {\r\n                    legend += format(percentage, 'percentage') + '%';\r\n                } else {\r\n                    legend += format(value, 'value');\r\n                }\r\n                return `<span class=\"${className}\" style=\"border: 2px solid ${color};\">${legend}</span>`\r\n            },\r\n            setAttribute = function (el, o) {\r\n                for (var j in o) {\r\n                    el.setAttribute(j, o[j]);\r\n                }\r\n            };\r\n        \r\n        for (i = 0; i < data.length; i++) {\r\n            sum += data[i].value;\r\n            total += data[i].total;\r\n            templateContext.data[data[i].name] = data[i];\r\n        }\r\n\r\n        if (sum == 0) {\r\n            for (i = 0; i < data.length; i++) {\r\n                data[i].value = 1;\r\n                sum += data[i].value;\r\n                total += data[i].value;\r\n            }\r\n        }\r\n        templateContext.sum = sum;\r\n        templateContext.total = total;\r\n        div.className = 'donut';\r\n        div.style.width = div.style.height = size0 + 'px';\r\n        div.style.position = 'relative';\r\n\r\n        text = div.appendChild(document.createElement('span'));\r\n\r\n        text.className = options.textClassName || 'donut-text';\r\n\r\n        //if css is included, please comment the next line for performance.\r\n        //text.setAttribute('style', 'color: black;display: block;position: absolute;top: 50%;left: 0;z-index: 2;line-height: 0;width: 100%;text-align: center;')\r\n\r\n        if (options.textCompiler) {\r\n            text.innerHTML = options.textCompiler(templateContext);\r\n        } else if (options.textContent === 'count') {\r\n            text.innerHTML = format(data.length, 'count');\r\n        } else if (options.textContent === 'total') {\r\n            text.innerHTML = format(total, 'value');\r\n        } else {\r\n            text.innerHTML = format(sum, 'value');\r\n        }\r\n        legend = document.createElement('div');\r\n\r\n\r\n        var NS = 'http://www.w3.org/2000/svg',\r\n            svg = doc.createElementNS(NS, 'svg'),\r\n            startAngle = -PI / 2,\r\n            arcRadius = r - weight / 2;\r\n\r\n        svg.setAttribute('height', size0 + 'px');\r\n        svg.setAttribute('width', size0 + 'px');\r\n\r\n        var circle = doc.createElementNS(NS, 'circle');\r\n        circle.setAttribute('cx', size0 / 2.0);\r\n        circle.setAttribute('cy', size0 / 2.0);\r\n        circle.setAttribute('r', arcRadius - weight / 2);\r\n        circle.setAttribute('fill', fillColor);\r\n        circle.setAttribute('fill-opacity', opacity);\r\n        svg.appendChild(circle);\r\n        // svg.innerHTML = '<circle cx=\"' + size0 / 2.0 + '\" cy=\"' + size0 / 2.0 + '\" r=\"' + (arcRadius - weight / 2) + '\" fill=\"' + fillColor + '\" fill-opacity=\"0.6\"></circle>'\r\n        \r\n        div.appendChild(svg);\r\n\r\n        for (i = 0; i < data.length; i++) {\r\n            // Donut section weight is computed relatively to sum or total\r\n            value = data[i].value / (sum !== total ? total : sum);\r\n            value = value === 1 ? .99999 : value;\r\n            arc = doc.createElementNS(NS, 'path');\r\n            var r1 = r + 5;\r\n            var segmentAngle = value * PI * 2,\r\n                endAngle = segmentAngle + startAngle,\r\n                largeArc = ((endAngle - startAngle) % (PI * 2)) > PI ? 1 : 0,\r\n                startX = r1 + cos(startAngle) * arcRadius,\r\n                startY = r1 + sin(startAngle) * arcRadius,\r\n                endX = r1 + cos(endAngle) * arcRadius,\r\n                endY = r1 + sin(endAngle) * arcRadius;\r\n\r\n            var name = data[i].name\r\n            var c = '#555'\r\n            if (!colors) {\r\n                // Check if the value contains directly the color if no dict available\r\n                if ((typeof name === 'string') && name.startsWith('#')) c = name\r\n            } else {\r\n                if (Array.isArray(colors)) c = colors[i % colors.length]\r\n                else c = colors[name] || '#fff'\r\n            }\r\n            startAngle = endAngle;\r\n\r\n            setAttribute(arc, {\r\n                d: [\r\n                    'M', startX, startY,\r\n                    'A', arcRadius, arcRadius, 0, largeArc, 1, endX, endY\r\n                ].join(' '),\r\n                stroke: c,\r\n                'stroke-opacity': opacity,\r\n                'stroke-width': weight,\r\n                fill: 'none',\r\n                'data-name': name,\r\n                'class': 'donut-arc'\r\n            });\r\n            donut.data(arc, data[i]);\r\n\r\n            (function (d, c, percentage) {\r\n                if (options.onclick) {\r\n                    arc.addEventListener('click', function (e) {\r\n                        var t = e.target,\r\n                            val = format(d.value, 'value');\r\n                        if (t.parentNode.stick != t) {\r\n                            t.parentNode.stick = t;\r\n                        } else t.parentNode.stick = false;\r\n                        options.onclick(d.name, !!t.parentNode.stick);\r\n                    })\r\n                }\r\n\r\n                arc.addEventListener('mouseenter', function (e) {\r\n                    if (options.hideLegend) return\r\n                    var t = e.target\r\n                    t.setAttribute('stroke-width', weight + 5);\r\n                    legend.setAttribute('class', 'legend');\r\n                    div.zIndex = div.parentNode.style.zIndex;\r\n                    div.parentNode.style.zIndex = 100000;\r\n                    if (!options.legendCompiler && !options.textCompiler) {\r\n                        // If we have the value in the legend it does not make sense to also have it in text,\r\n                        // so that we switch automatically to percentage display in text\r\n                        if (options.legendContent !== 'percentage') {\r\n                            text.innerHTML = format(percentage, 'percentage') + '%';\r\n                        } else {\r\n                            text.innerHTML = format(d.value, 'value');\r\n                        }\r\n                    }\r\n                    t.saved = {\r\n                        val: d.value,\r\n                        legend: options.legendCompiler ?\r\n                            options.legendCompiler(Object.assign(templateContext, { selected: d, percentage, color: c })) :\r\n                            getLegend(d.title || d.name, c, percentage, d.value)\r\n                    }\r\n                    legend.innerHTML = t.saved.legend;\r\n                })\r\n                arc.addEventListener('mouseleave', function (e) {\r\n                    if (options.hideLegend) return\r\n                    var t = e.target,\r\n                        stick = t.parentNode.stick;\r\n                    if (stick == t) {\r\n                        return;\r\n                    }\r\n                    t.setAttribute('stroke-width', weight);\r\n                    var saved = {\r\n                        legend: ''\r\n                    }\r\n                    if (options.textCompiler) {\r\n                        saved.val = options.textCompiler(templateContext);\r\n                    } else if (options.textContent === 'count') {\r\n                        saved.val = data.length;\r\n                    } else if (options.textContent === 'total') {\r\n                        saved.val = total;\r\n                    } else {\r\n                        saved.val = sum;\r\n                    }\r\n                    if (stick) {\r\n                        saved = stick.saved;\r\n                    }\r\n                    div.parentNode.style.zIndex = div.zIndex;\r\n                    text.innerHTML = (options.textCompiler ?\r\n                        saved.val : format(saved.val, (options.textContent === 'count' ? 'count' : 'value')));\r\n                    legend.innerHTML = saved.legend;\r\n                })\r\n            })(data[i], c, value * 100)\r\n            svg.appendChild(arc);\r\n            if (data[i].active) {\r\n                svg.stick = arc;\r\n                var event = new MouseEvent('mouseenter', {\r\n                    view: window,\r\n                    bubbles: false,\r\n                    cancelable: true\r\n                });\r\n                arc.dispatchEvent(event);\r\n                arc.setAttribute('stroke-width', weight);\r\n            }\r\n        }\r\n\r\n\r\n        div.appendChild(legend);\r\n        if (el) {\r\n            el.appendChild(div)\r\n        }\r\n\r\n        return div;\r\n    };\r\n\r\n\r\n    donut.data = function (arc, data) {\r\n        if (typeof data === 'undefined') {\r\n            return donutData[arc._DONUT];\r\n        } else {\r\n            donutData[arc._DONUT = arc._DONUT || ++dataIndex] = data;\r\n            return arc;\r\n        }\r\n    };\r\n\r\n    donut.setColor = function (arc, color) {\r\n        arc.setAttribute('stroke', color);\r\n        return arc;\r\n    };\r\n\r\n    function createDonut(points, opt, cfgFn) {\r\n        var blocks = {},\r\n            totalBlocks = {},\r\n            count = points.length,\r\n            key = opt.key,\r\n            sumField = opt.sumField,\r\n            totalField = opt.totalField || opt.sumField,\r\n            fieldList = opt.order || [],\r\n            fieldDict = opt.orderDict || {},\r\n            titleDict = opt.title || {},\r\n            cfg = {};\r\n        if (typeof cfgFn == 'function')\r\n            cfg = cfgFn(points);\r\n        else if (typeof cfgFn == 'object') {\r\n            cfg = cfgFn\r\n        }\r\n        if(Array.isArray(opt.title) && opt.order){\r\n            titleDict =  {};\r\n            for(var i = 0; i < opt.title.length; i++){\r\n                titleDict[opt.order[i]] = opt.title[i]\r\n            }\r\n            opt.title = titleDict;\r\n        }\r\n        for(var i = 0; i < fieldList.length; i++){\r\n            fieldDict[fieldList[i]] = 1;\r\n        }\r\n\r\n        for (var i = 0; i < count; i++) {\r\n            var point = points[i]\r\n            // We can get value from marker options or underlying feature\r\n            var feature = point.feature\r\n            var properties = {}\r\n            if (feature && feature.properties) properties = feature.properties\r\n            var s = point.options[key] || properties[key]\r\n            if (!blocks[s]) blocks[s] = 0;\r\n            if (!totalBlocks[s]) totalBlocks[s] = 0;\r\n            if (!fieldDict[s]) {\r\n                fieldDict[s] = 1;\r\n                fieldList.push(s);\r\n            }\r\n\r\n            if (!sumField) blocks[s]++;\r\n            else blocks[s] += point.options[sumField] || properties[sumField];\r\n            if (!totalField) totalBlocks[s]++;\r\n            else totalBlocks[s] += point.options[totalField] || properties[totalField];\r\n        }\r\n        var list = [];\r\n        // Ascending by default if not given\r\n        if (!opt.order) fieldList.sort()\r\n        for(var i = 0; i < fieldList.length; i++){\r\n            var s = fieldList[i];\r\n            list.push({\r\n                value: blocks[s] || 0,\r\n                total: totalBlocks[s] || 0,\r\n                name: s,\r\n                title: titleDict[s],\r\n                active: cfg.active && cfg.active == s\r\n            });            \r\n        }\r\n\r\n        var myDonut = donut({\r\n            size: cfg.size || 50,\r\n            weight: cfg.weight || 10,\r\n            opacity: cfg.opacity || 0.7,\r\n            textContent: cfg.textContent || 'sum',\r\n            textClassName: cfg.textClassName || 'donut-text',\r\n            textCompiler: cfg.textCompiler,\r\n            hideLegend: cfg.hideLegend,\r\n            legendContent: cfg.legendContent || 'percentage',\r\n            legendClassName: cfg.legendClassName || 'donut-legend',\r\n            legendCompiler: cfg.legendCompiler,\r\n            format: cfg.format || readable,\r\n            getLegend: cfg.getLegend,\r\n            data: list,\r\n            onclick: cfg.onclick,\r\n            colors: cfg.colors,\r\n            fillColor: cfg.fillColor\r\n        });\r\n        myDonut.config = cfg;\r\n        return myDonut;\r\n    }\r\n    // to use donut as icon\r\n    L.DivIcon.prototype.createIcon = function (oldIcon) {\r\n        var div = (oldIcon && oldIcon.tagName === 'DIV') ? oldIcon : document.createElement('div'),\r\n            options = this.options;\r\n\r\n        if (options.el) {\r\n            div.appendChild(options.el);\r\n        } else\r\n            div.innerHTML = options.html !== false ? options.html : '';\r\n\r\n        if (options.bgPos) {\r\n            var bgPos = L.Point(options.bgPos);\r\n            div.style.backgroundPosition = (-bgPos.x) + 'px ' + (-bgPos.y) + 'px';\r\n        }\r\n        this._setIconStyles(div, 'icon');\r\n\r\n        return div;\r\n    }\r\n\r\n    function defaultStyle(points) {\r\n        var count = points.length,\r\n            size, weight, fill;\r\n        if (count < 10) {\r\n            size = 40;\r\n            weight = 8;\r\n            // c += 'small';\r\n            fill = '#6ecc39';\r\n        } else if (count < 100) {\r\n            size = 50;\r\n            weight = 10;\r\n            // c += 'medium';\r\n            fill = '#f1d357'\r\n        } else {\r\n            size = 60;\r\n            weight = 12;\r\n            // c += 'large';\r\n            fill = '#fd9c73'\r\n        }\r\n        return {\r\n            size: size,\r\n            weight: weight,\r\n            fill: fill\r\n        }\r\n    }\r\n    /**\r\n     *  \r\n     * @param {object} opt marker cluster's options\r\n     * @param {object} donutOpt donut cluster's options\r\n     * \r\n     */\r\n    L.DonutCluster = function (opt, donutOpt) {\r\n        // Manage templating\r\n        var textCompiler, legendCompiler;\r\n        if (window._ && (typeof window._.template === 'function')) {\r\n            if (donutOpt.textTemplate) textCompiler = _.template(donutOpt.textTemplate);\r\n            if (donutOpt.legendTemplate) legendCompiler = _.template(donutOpt.legendTemplate);\r\n        }\r\n\r\n        var createIcon = function (cluster) {\r\n            var markers = cluster.getAllChildMarkers();\r\n            var myDonut = createDonut(markers, donutOpt, function (points) {\r\n                var style;\r\n                if (!donutOpt.style) {\r\n                    style = defaultStyle(points)\r\n                } else {\r\n                    if (typeof donutOpt.style == 'function') {\r\n                        style = donutOpt.style(points);\r\n                    } else style = donutOpt.style;\r\n                }\r\n                return {\r\n                    size: style.size,\r\n                    weight: style.weight,\r\n                    opacity: style.opacity,\r\n                    hideLegend: donutOpt.hideLegend,\r\n                    legendContent: donutOpt.legendContent,\r\n                    legendClassName: donutOpt.legendClassName,\r\n                    legendCompiler: legendCompiler,\r\n                    format: donutOpt.format,\r\n                    getLegend: donutOpt.getLegend,\r\n                    textContent: donutOpt.textContent,\r\n                    textClassName: donutOpt.textClassName,\r\n                    textCompiler: textCompiler,\r\n                    colors: donutOpt.arcColorDict,\r\n                    fillColor: style.fill\r\n                }\r\n            })\r\n\r\n            return new L.DivIcon({\r\n                el: myDonut,\r\n                iconSize: new L.Point(myDonut.config.size + 10, myDonut.config.size + 10),\r\n                className: donutOpt.className || 'donut-cluster'\r\n            });\r\n\r\n        }\r\n        opt.iconCreateFunction = createIcon;\r\n        return L.markerClusterGroup(opt, donutOpt);\r\n    }\r\n\r\n    // donut.readable = readable;\r\n    // window.donut = donut;\r\n}, window));"]}