koishi-plugin-tmp-bot 1.8.1 → 1.8.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.
@@ -1,66 +0,0 @@
1
- const truckyAppApi = require('../../api/truckyAppApi')
2
- const baiduTranslate = require('../../util/baiduTranslate')
3
-
4
- /**
5
- * 服务器别名
6
- */
7
- const serverNameAlias = {
8
- 's1': 'sim1',
9
- 's2': 'sim2',
10
- 'p': 'eupromods1',
11
- 'a': 'arc1'
12
- }
13
-
14
- /**
15
- * 路况程度转中文
16
- */
17
- const severityToZh = {
18
- 'Fluid': '🟢畅通',
19
- 'Moderate': '🟠正常',
20
- 'Congested': '🔴缓慢',
21
- 'Heavy': '🟣拥堵'
22
- }
23
-
24
- /**
25
- * 位置类型转中文
26
- */
27
- const typeToZh = {
28
- 'City': '城市',
29
- 'Road': '公路',
30
- 'Intersection': '十字路口'
31
- }
32
-
33
- /**
34
- * 查询路况
35
- */
36
- module.exports = async (ctx, cfg, serverName) => {
37
- // 转换服务器别名
38
- let serverQueryName = serverNameAlias[serverName]
39
- if (!serverQueryName) {
40
- return '请输入正确的服务器名称 (s1, s2, p, a)'
41
- }
42
-
43
- let trafficData = await truckyAppApi.trafficTop(ctx.http, serverQueryName)
44
- if (trafficData.error) {
45
- return '查询路况信息失败'
46
- }
47
-
48
- // 构建消息
49
- let message = ''
50
- for (const traffic of trafficData.data) {
51
- // 如果已有内容,换行
52
- if (message) {
53
- message += '\n\n'
54
- }
55
-
56
- message += await baiduTranslate(ctx, cfg, traffic.country)
57
- message += ' - '
58
- let name = traffic.name.substring(0, traffic.name.lastIndexOf('(') - 1)
59
- let type = traffic.name.substring(traffic.name.lastIndexOf('(') + 1, traffic.name.lastIndexOf(')'))
60
- message += await baiduTranslate(ctx, cfg, name) + ` (${typeToZh[type] || type})`
61
- message += '\n路况: ' + (severityToZh[traffic.newSeverity] || traffic.color)
62
- message += ' | 人数: ' + traffic.players
63
- }
64
-
65
- return message
66
- }
@@ -1,45 +0,0 @@
1
- module.exports = {
2
- /**
3
- * 获取绑定信息
4
- * @param db 数据源
5
- * @param platform 平台
6
- * @param userId 用户编号
7
- */
8
- async get (db, platform, userId) {
9
- const guildBindList = await db.get('tmp_guild_bind', {
10
- platform,
11
- user_id: userId
12
- })
13
-
14
- if (guildBindList && guildBindList.length > 0) {
15
- return guildBindList[0]
16
- }
17
-
18
- return null
19
- },
20
- /**
21
- * 新增或更新绑定信息
22
- * @param db 数据源
23
- * @param platform 平台
24
- * @param userId 用户编号
25
- * @param userName 用户昵称
26
- * @param tmpId TMP ID
27
- */
28
- saveOrUpdate (db, platform, userId, userName, tmpId) {
29
- this.get(db, platform, userId).then((data) => {
30
- if (data) {
31
- db.set('tmp_guild_bind', data.id, {
32
- tmp_id: tmpId,
33
- user_name: userName
34
- })
35
- } else {
36
- db.create('tmp_guild_bind', {
37
- platform: platform,
38
- user_id: userId,
39
- user_name: userName,
40
- tmp_id: tmpId
41
- })
42
- }
43
- })
44
- }
45
- }
@@ -1,72 +0,0 @@
1
- /**
2
- * 数据表声明
3
- */
4
- const modelArray = {
5
- tmp_guild_bind: {
6
- id: {
7
- type: 'unsigned',
8
- length: 10,
9
- nullable: false,
10
- comment: '主键'
11
- },
12
- platform: {
13
- type: 'string',
14
- length: 50,
15
- nullable: false,
16
- comment: '所属平台'
17
- },
18
- user_id: {
19
- type: 'string',
20
- length: 50,
21
- nullable: false,
22
- comment: '用户编号'
23
- },
24
- user_name: {
25
- type: 'string',
26
- length: 50,
27
- nullable: false,
28
- comment: '用户昵称'
29
- },
30
- tmp_id: {
31
- type: 'unsigned',
32
- length: 50,
33
- nullable: false,
34
- comment: 'TMP ID'
35
- }
36
- },
37
- tmp_translate_cache: {
38
- id: {
39
- type: 'unsigned',
40
- length: 10,
41
- nullable: false,
42
- comment: '主键'
43
- },
44
- content: {
45
- type: 'string',
46
- nullable: false,
47
- length: 200,
48
- comment: '原文文本'
49
- },
50
- content_md5: {
51
- type: 'string',
52
- nullable: false,
53
- length: 32,
54
- comment: '原文文本md5'
55
- },
56
- translate_content: {
57
- type: 'string',
58
- nullable: false,
59
- length: 200,
60
- comment: '翻译文本'
61
- }
62
- }
63
- }
64
-
65
- /**
66
- * 初始化数据库
67
- */
68
- module.exports = (ctx) => {
69
- for (let modelName in modelArray) {
70
- ctx.model.extend(modelName, modelArray[modelName], { autoInc: true })
71
- }
72
- }
@@ -1,33 +0,0 @@
1
- module.exports = {
2
- /**
3
- * 查询翻译
4
- * @param db 数据源
5
- * @param contentMd5 文本MD5
6
- */
7
- async getTranslate (db, contentMd5) {
8
- const translateCacheList = await db.get('tmp_translate_cache', {
9
- content_md5: contentMd5
10
- })
11
-
12
- // 如果查询到了缓存,直接返回翻译文本
13
- if (translateCacheList && translateCacheList.length > 0) {
14
- return translateCacheList[0].translate_content
15
- }
16
-
17
- return null
18
- },
19
- /**
20
- * 保存翻译缓存信息
21
- * @param db 数据源
22
- * @param contentMd5 原文文本MD5
23
- * @param content 原文文本
24
- * @param translateContent 翻译文本
25
- */
26
- save (db, contentMd5, content, translateContent) {
27
- db.create('tmp_translate_cache', {
28
- content,
29
- content_md5: contentMd5,
30
- translate_content: translateContent
31
- })
32
- }
33
- }
package/lib/index.d.ts DELETED
@@ -1,14 +0,0 @@
1
- import { Context, Schema } from 'koishi';
2
- export declare const name = "tmp-bot";
3
- export declare const inject: {
4
- required: string[];
5
- optional: string[];
6
- };
7
- export interface Config {
8
- baiduTranslateEnable: boolean;
9
- baiduTranslateAppId: string;
10
- baiduTranslateKey: string;
11
- baiduTranslateCacheEnable: boolean;
12
- }
13
- export declare const Config: Schema<Config>;
14
- export declare function apply(ctx: Context, cfg: Config): void;
package/lib/index.js DELETED
@@ -1,43 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.apply = exports.Config = exports.inject = exports.name = void 0;
4
- const koishi_1 = require("koishi");
5
- const model = require('./database/model');
6
- const tmpQuery = require('./command/tmpQuery');
7
- const tmpServer = require('./command/tmpServer');
8
- const tmpBind = require('./command/tmpBind');
9
- const tmpTraffic = require('./command/tmpTraffic/tmpTraffic');
10
- const tmpPosition = require('./command/tmpPosition');
11
- const likeMe = require('./command/likeMe');
12
- exports.name = 'tmp-bot';
13
- exports.inject = {
14
- required: ['database'],
15
- optional: ['puppeteer']
16
- };
17
- exports.Config = koishi_1.Schema.intersect([
18
- koishi_1.Schema.object({
19
- baiduTranslateEnable: koishi_1.Schema.boolean().default(false).description('启用百度翻译'),
20
- baiduTranslateAppId: koishi_1.Schema.string().description('百度翻译APP ID'),
21
- baiduTranslateKey: koishi_1.Schema.string().description('百度翻译秘钥'),
22
- baiduTranslateCacheEnable: koishi_1.Schema.boolean().default(false).description('启用百度翻译缓存')
23
- }).description('基本配置'),
24
- koishi_1.Schema.object({
25
- tmpTrafficType: koishi_1.Schema.union([
26
- koishi_1.Schema.const(1).description('文字'),
27
- koishi_1.Schema.const(2).description('热力图')
28
- ]).default(1).description('路况信息展示方式'),
29
- }).description('指令配置'),
30
- ]);
31
- function apply(ctx, cfg) {
32
- // 初始化数据表
33
- model(ctx);
34
- // 注册指令
35
- ctx.command('tmpquery <tmpId>').action(async ({ session }, tmpId) => await tmpQuery(ctx, cfg, session, tmpId));
36
- ctx.command('tmpserverats').action(async () => await tmpServer(ctx, cfg, 'ATS'));
37
- ctx.command('tmpserverets').action(async () => await tmpServer(ctx, cfg, 'ETS2'));
38
- ctx.command('tmpbind <tmpId>').action(async ({ session }, tmpId) => await tmpBind(ctx, cfg, session, tmpId));
39
- ctx.command('tmptraffic <serverName>').action(async ({ session }, serverName) => await tmpTraffic(ctx, cfg, serverName));
40
- ctx.command('tmpposition <tmpId>').action(async ({ session }, tmpId) => await tmpPosition(ctx, cfg, session, tmpId));
41
- ctx.command('likeme').action(async ({ session }) => await likeMe(session));
42
- }
43
- exports.apply = apply;
@@ -1,9 +0,0 @@
1
- /*
2
- * heatmap.js v2.0.2 | JavaScript Heatmap Library
3
- *
4
- * Copyright 2008-2016 Patrick Wied <heatmapjs@patrick-wied.at> - All rights reserved.
5
- * Dual licensed under MIT and Beerware license
6
- *
7
- * :: 2016-02-04 21:25
8
- */
9
- (function (a, b, c) { if (typeof module !== "undefined" && module.exports) { module.exports = c() } else if (typeof define === "function" && define.amd) { define(c) } else { b[a] = c() } })("h337", this, function () { var a = { defaultRadius: 40, defaultRenderer: "canvas2d", defaultGradient: { .25: "rgb(0,0,255)", .55: "rgb(0,255,0)", .85: "yellow", 1: "rgb(255,0,0)" }, defaultMaxOpacity: 1, defaultMinOpacity: 0, defaultBlur: .85, defaultXField: "x", defaultYField: "y", defaultValueField: "value", plugins: {} }; var b = function h() { var b = function d(a) { this._coordinator = {}; this._data = []; this._radi = []; this._min = 0; this._max = 1; this._xField = a["xField"] || a.defaultXField; this._yField = a["yField"] || a.defaultYField; this._valueField = a["valueField"] || a.defaultValueField; if (a["radius"]) { this._cfgRadius = a["radius"] } }; var c = a.defaultRadius; b.prototype = { _organiseData: function (a, b) { var d = a[this._xField]; var e = a[this._yField]; var f = this._radi; var g = this._data; var h = this._max; var i = this._min; var j = a[this._valueField] || 1; var k = a.radius || this._cfgRadius || c; if (!g[d]) { g[d] = []; f[d] = [] } if (!g[d][e]) { g[d][e] = j; f[d][e] = k } else { g[d][e] += j } if (g[d][e] > h) { if (!b) { this._max = g[d][e] } else { this.setDataMax(g[d][e]) } return false } else { return { x: d, y: e, value: j, radius: k, min: i, max: h } } }, _unOrganizeData: function () { var a = []; var b = this._data; var c = this._radi; for (var d in b) { for (var e in b[d]) { a.push({ x: d, y: e, radius: c[d][e], value: b[d][e] }) } } return { min: this._min, max: this._max, data: a } }, _onExtremaChange: function () { this._coordinator.emit("extremachange", { min: this._min, max: this._max }) }, addData: function () { if (arguments[0].length > 0) { var a = arguments[0]; var b = a.length; while (b--) { this.addData.call(this, a[b]) } } else { var c = this._organiseData(arguments[0], true); if (c) { this._coordinator.emit("renderpartial", { min: this._min, max: this._max, data: [c] }) } } return this }, setData: function (a) { var b = a.data; var c = b.length; this._data = []; this._radi = []; for (var d = 0; d < c; d++) { this._organiseData(b[d], false) } this._max = a.max; this._min = a.min || 0; this._onExtremaChange(); this._coordinator.emit("renderall", this._getInternalData()); return this }, removeData: function () { }, setDataMax: function (a) { this._max = a; this._onExtremaChange(); this._coordinator.emit("renderall", this._getInternalData()); return this }, setDataMin: function (a) { this._min = a; this._onExtremaChange(); this._coordinator.emit("renderall", this._getInternalData()); return this }, setCoordinator: function (a) { this._coordinator = a }, _getInternalData: function () { return { max: this._max, min: this._min, data: this._data, radi: this._radi } }, getData: function () { return this._unOrganizeData() } }; return b }(); var c = function i() { var a = function (a) { var b = a.gradient || a.defaultGradient; var c = document.createElement("canvas"); var d = c.getContext("2d"); c.width = 256; c.height = 1; var e = d.createLinearGradient(0, 0, 256, 1); for (var f in b) { e.addColorStop(f, b[f]) } d.fillStyle = e; d.fillRect(0, 0, 256, 1); return d.getImageData(0, 0, 256, 1).data }; var b = function (a, b) { var c = document.createElement("canvas"); var d = c.getContext("2d"); var e = a; var f = a; c.width = c.height = a * 2; if (b == 1) { d.beginPath(); d.arc(e, f, a, 0, 2 * Math.PI, false); d.fillStyle = "rgba(0,0,0,1)"; d.fill() } else { var g = d.createRadialGradient(e, f, a * b, e, f, a); g.addColorStop(0, "rgba(0,0,0,1)"); g.addColorStop(1, "rgba(0,0,0,0)"); d.fillStyle = g; d.fillRect(0, 0, 2 * a, 2 * a) } return c }; var c = function (a) { var b = []; var c = a.min; var d = a.max; var e = a.radi; var a = a.data; var f = Object.keys(a); var g = f.length; while (g--) { var h = f[g]; var i = Object.keys(a[h]); var j = i.length; while (j--) { var k = i[j]; var l = a[h][k]; var m = e[h][k]; b.push({ x: h, y: k, value: l, radius: m }) } } return { min: c, max: d, data: b } }; function d(b) { var c = b.container; var d = this.shadowCanvas = document.createElement("canvas"); var e = this.canvas = b.canvas || document.createElement("canvas"); var f = this._renderBoundaries = [1e4, 1e4, 0, 0]; var g = getComputedStyle(b.container) || {}; e.className = "heatmap-canvas"; this._width = e.width = d.width = b.width || +g.width.replace(/px/, ""); this._height = e.height = d.height = b.height || +g.height.replace(/px/, ""); this.shadowCtx = d.getContext("2d"); this.ctx = e.getContext("2d"); e.style.cssText = d.style.cssText = "position:absolute;left:0;top:0;"; c.style.position = "relative"; c.appendChild(e); this._palette = a(b); this._templates = {}; this._setStyles(b) } d.prototype = { renderPartial: function (a) { if (a.data.length > 0) { this._drawAlpha(a); this._colorize() } }, renderAll: function (a) { this._clear(); if (a.data.length > 0) { this._drawAlpha(c(a)); this._colorize() } }, _updateGradient: function (b) { this._palette = a(b) }, updateConfig: function (a) { if (a["gradient"]) { this._updateGradient(a) } this._setStyles(a) }, setDimensions: function (a, b) { this._width = a; this._height = b; this.canvas.width = this.shadowCanvas.width = a; this.canvas.height = this.shadowCanvas.height = b }, _clear: function () { this.shadowCtx.clearRect(0, 0, this._width, this._height); this.ctx.clearRect(0, 0, this._width, this._height) }, _setStyles: function (a) { this._blur = a.blur == 0 ? 0 : a.blur || a.defaultBlur; if (a.backgroundColor) { this.canvas.style.backgroundColor = a.backgroundColor } this._width = this.canvas.width = this.shadowCanvas.width = a.width || this._width; this._height = this.canvas.height = this.shadowCanvas.height = a.height || this._height; this._opacity = (a.opacity || 0) * 255; this._maxOpacity = (a.maxOpacity || a.defaultMaxOpacity) * 255; this._minOpacity = (a.minOpacity || a.defaultMinOpacity) * 255; this._useGradientOpacity = !!a.useGradientOpacity }, _drawAlpha: function (a) { var c = this._min = a.min; var d = this._max = a.max; var a = a.data || []; var e = a.length; var f = 1 - this._blur; while (e--) { var g = a[e]; var h = g.x; var i = g.y; var j = g.radius; var k = Math.min(g.value, d); var l = h - j; var m = i - j; var n = this.shadowCtx; var o; if (!this._templates[j]) { this._templates[j] = o = b(j, f) } else { o = this._templates[j] } var p = (k - c) / (d - c); n.globalAlpha = p < .01 ? .01 : p; n.drawImage(o, l, m); if (l < this._renderBoundaries[0]) { this._renderBoundaries[0] = l } if (m < this._renderBoundaries[1]) { this._renderBoundaries[1] = m } if (l + 2 * j > this._renderBoundaries[2]) { this._renderBoundaries[2] = l + 2 * j } if (m + 2 * j > this._renderBoundaries[3]) { this._renderBoundaries[3] = m + 2 * j } } }, _colorize: function () { var a = this._renderBoundaries[0]; var b = this._renderBoundaries[1]; var c = this._renderBoundaries[2] - a; var d = this._renderBoundaries[3] - b; var e = this._width; var f = this._height; var g = this._opacity; var h = this._maxOpacity; var i = this._minOpacity; var j = this._useGradientOpacity; if (a < 0) { a = 0 } if (b < 0) { b = 0 } if (a + c > e) { c = e - a } if (b + d > f) { d = f - b } var k = this.shadowCtx.getImageData(a, b, c, d); var l = k.data; var m = l.length; var n = this._palette; for (var o = 3; o < m; o += 4) { var p = l[o]; var q = p * 4; if (!q) { continue } var r; if (g > 0) { r = g } else { if (p < h) { if (p < i) { r = i } else { r = p } } else { r = h } } l[o - 3] = n[q]; l[o - 2] = n[q + 1]; l[o - 1] = n[q + 2]; l[o] = j ? n[q + 3] : r } k.data = l; this.ctx.putImageData(k, a, b); this._renderBoundaries = [1e3, 1e3, 0, 0] }, getValueAt: function (a) { var b; var c = this.shadowCtx; var d = c.getImageData(a.x, a.y, 1, 1); var e = d.data[3]; var f = this._max; var g = this._min; b = Math.abs(f - g) * (e / 255) >> 0; return b }, getDataURL: function () { return this.canvas.toDataURL() } }; return d }(); var d = function j() { var b = false; if (a["defaultRenderer"] === "canvas2d") { b = c } return b }(); var e = { merge: function () { var a = {}; var b = arguments.length; for (var c = 0; c < b; c++) { var d = arguments[c]; for (var e in d) { a[e] = d[e] } } return a } }; var f = function k() { var c = function h() { function a() { this.cStore = {} } a.prototype = { on: function (a, b, c) { var d = this.cStore; if (!d[a]) { d[a] = [] } d[a].push(function (a) { return b.call(c, a) }) }, emit: function (a, b) { var c = this.cStore; if (c[a]) { var d = c[a].length; for (var e = 0; e < d; e++) { var f = c[a][e]; f(b) } } } }; return a }(); var f = function (a) { var b = a._renderer; var c = a._coordinator; var d = a._store; c.on("renderpartial", b.renderPartial, b); c.on("renderall", b.renderAll, b); c.on("extremachange", function (b) { a._config.onExtremaChange && a._config.onExtremaChange({ min: b.min, max: b.max, gradient: a._config["gradient"] || a._config["defaultGradient"] }) }); d.setCoordinator(c) }; function g() { var g = this._config = e.merge(a, arguments[0] || {}); this._coordinator = new c; if (g["plugin"]) { var h = g["plugin"]; if (!a.plugins[h]) { throw new Error("Plugin '" + h + "' not found. Maybe it was not registered.") } else { var i = a.plugins[h]; this._renderer = new i.renderer(g); this._store = new i.store(g) } } else { this._renderer = new d(g); this._store = new b(g) } f(this) } g.prototype = { addData: function () { this._store.addData.apply(this._store, arguments); return this }, removeData: function () { this._store.removeData && this._store.removeData.apply(this._store, arguments); return this }, setData: function () { this._store.setData.apply(this._store, arguments); return this }, setDataMax: function () { this._store.setDataMax.apply(this._store, arguments); return this }, setDataMin: function () { this._store.setDataMin.apply(this._store, arguments); return this }, configure: function (a) { this._config = e.merge(this._config, a); this._renderer.updateConfig(this._config); this._coordinator.emit("renderall", this._store._getInternalData()); return this }, repaint: function () { this._coordinator.emit("renderall", this._store._getInternalData()); return this }, getData: function () { return this._store.getData() }, getDataURL: function () { return this._renderer.getDataURL() }, getValueAt: function (a) { if (this._store.getValueAt) { return this._store.getValueAt(a) } else if (this._renderer.getValueAt) { return this._renderer.getValueAt(a) } else { return null } } }; return g }(); var g = { create: function (a) { return new f(a) }, register: function (b, c) { a.plugins[b] = c } }; return g });
@@ -1,246 +0,0 @@
1
- /*
2
- * Leaflet Heatmap Overlay
3
- *
4
- * Copyright (c) 2008-2016, Patrick Wied (https://www.patrick-wied.at)
5
- * Dual-licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
6
- * and the Beerware (http://en.wikipedia.org/wiki/Beerware) license.
7
- */
8
- ; (function (name, context, factory) {
9
- // Supports UMD. AMD, CommonJS/Node.js and browser context
10
- if (typeof module !== "undefined" && module.exports) {
11
- module.exports = factory(
12
- require('heatmap.js'),
13
- require('leaflet')
14
- );
15
- } else if (typeof define === "function" && define.amd) {
16
- define(['heatmap.js', 'leaflet'], factory);
17
- } else {
18
- // browser globals
19
- if (typeof window.h337 === 'undefined') {
20
- throw new Error('heatmap.js must be loaded before the leaflet heatmap plugin');
21
- }
22
- if (typeof window.L === 'undefined') {
23
- throw new Error('Leaflet must be loaded before the leaflet heatmap plugin');
24
- }
25
- context[name] = factory(window.h337, window.L);
26
- }
27
-
28
- })("HeatmapOverlay", this, function (h337, L) {
29
- 'use strict';
30
-
31
- // Leaflet < 0.8 compatibility
32
- if (typeof L.Layer === 'undefined') {
33
- L.Layer = L.Class;
34
- }
35
-
36
- var HeatmapOverlay = L.Layer.extend({
37
-
38
- initialize: function (config) {
39
- this.cfg = config;
40
- this._el = L.DomUtil.create('div', 'leaflet-zoom-hide');
41
- this._data = [];
42
- this._max = 1;
43
- this._min = 0;
44
- this.cfg.container = this._el;
45
- },
46
-
47
- onAdd: function (map) {
48
- var size = map.getSize();
49
-
50
- this._map = map;
51
-
52
- this._width = size.x;
53
- this._height = size.y;
54
-
55
- this._el.style.width = size.x + 'px';
56
- this._el.style.height = size.y + 'px';
57
- this._el.style.position = 'absolute';
58
-
59
- this._origin = this._map.layerPointToLatLng(new L.Point(0, 0));
60
-
61
- map.getPanes().overlayPane.appendChild(this._el);
62
-
63
- if (!this._heatmap) {
64
- this._heatmap = h337.create(this.cfg);
65
- }
66
-
67
- // this resets the origin and redraws whenever
68
- // the zoom changed or the map has been moved
69
- map.on('moveend', this._reset, this);
70
- this._draw();
71
- },
72
-
73
- addTo: function (map) {
74
- map.addLayer(this);
75
- return this;
76
- },
77
-
78
- onRemove: function (map) {
79
- // remove layer's DOM elements and listeners
80
- map.getPanes().overlayPane.removeChild(this._el);
81
-
82
- map.off('moveend', this._reset, this);
83
- },
84
- _draw: function () {
85
- if (!this._map) { return; }
86
-
87
- var mapPane = this._map.getPanes().mapPane;
88
- var point = mapPane._leaflet_pos;
89
-
90
- // reposition the layer
91
- this._el.style[HeatmapOverlay.CSS_TRANSFORM] = 'translate(' +
92
- -Math.round(point.x) + 'px,' +
93
- -Math.round(point.y) + 'px)';
94
-
95
- this._update();
96
- },
97
- _update: function () {
98
- var bounds, zoom, scale;
99
- var generatedData = { max: this._max, min: this._min, data: [] };
100
-
101
- bounds = this._map.getBounds();
102
- zoom = this._map.getZoom();
103
- scale = Math.pow(2, zoom);
104
-
105
- if (this._data.length == 0) {
106
- if (this._heatmap) {
107
- this._heatmap.setData(generatedData);
108
- }
109
- return;
110
- }
111
-
112
-
113
- var latLngPoints = [];
114
- var radiusMultiplier = this.cfg.scaleRadius ? scale : 1;
115
- var localMax = 0;
116
- var localMin = 0;
117
- var valueField = this.cfg.valueField;
118
- var len = this._data.length;
119
-
120
- while (len--) {
121
- var entry = this._data[len];
122
- var value = entry[valueField];
123
- var latlng = entry.latlng;
124
-
125
-
126
- // we don't wanna render points that are not even on the map ;-)
127
- if (!bounds.contains(latlng)) {
128
- continue;
129
- }
130
- // local max is the maximum within current bounds
131
- localMax = Math.max(value, localMax);
132
- localMin = Math.min(value, localMin);
133
-
134
- var point = this._map.latLngToContainerPoint(latlng);
135
- var latlngPoint = { x: Math.round(point.x), y: Math.round(point.y) };
136
- latlngPoint[valueField] = value;
137
-
138
- var radius;
139
-
140
- if (entry.radius) {
141
- radius = entry.radius * radiusMultiplier;
142
- } else {
143
- radius = (this.cfg.radius || 2) * radiusMultiplier;
144
- }
145
- latlngPoint.radius = radius;
146
- latLngPoints.push(latlngPoint);
147
- }
148
- if (this.cfg.useLocalExtrema) {
149
- generatedData.max = localMax;
150
- generatedData.min = localMin;
151
- }
152
-
153
- generatedData.data = latLngPoints;
154
-
155
- this._heatmap.setData(generatedData);
156
- },
157
- setData: function (data) {
158
- this._max = data.max || this._max;
159
- this._min = data.min || this._min;
160
- var latField = this.cfg.latField || 'lat';
161
- var lngField = this.cfg.lngField || 'lng';
162
- var valueField = this.cfg.valueField || 'value';
163
-
164
- // transform data to latlngs
165
- var data = data.data;
166
- var len = data.length;
167
- var d = [];
168
-
169
- while (len--) {
170
- var entry = data[len];
171
- var latlng = new L.LatLng(entry[latField], entry[lngField]);
172
- var dataObj = { latlng: latlng };
173
- dataObj[valueField] = entry[valueField];
174
- if (entry.radius) {
175
- dataObj.radius = entry.radius;
176
- }
177
- d.push(dataObj);
178
- }
179
- this._data = d;
180
-
181
- this._draw();
182
- },
183
- // experimential... not ready.
184
- addData: function (pointOrArray) {
185
- if (pointOrArray.length > 0) {
186
- var len = pointOrArray.length;
187
- while (len--) {
188
- this.addData(pointOrArray[len]);
189
- }
190
- } else {
191
- var latField = this.cfg.latField || 'lat';
192
- var lngField = this.cfg.lngField || 'lng';
193
- var valueField = this.cfg.valueField || 'value';
194
- var entry = pointOrArray;
195
- var latlng = new L.LatLng(entry[latField], entry[lngField]);
196
- var dataObj = { latlng: latlng };
197
-
198
- dataObj[valueField] = entry[valueField];
199
- this._max = Math.max(this._max, dataObj[valueField]);
200
- this._min = Math.min(this._min, dataObj[valueField]);
201
-
202
- if (entry.radius) {
203
- dataObj.radius = entry.radius;
204
- }
205
- this._data.push(dataObj);
206
- this._draw();
207
- }
208
- },
209
- _reset: function () {
210
- this._origin = this._map.layerPointToLatLng(new L.Point(0, 0));
211
-
212
- var size = this._map.getSize();
213
- if (this._width !== size.x || this._height !== size.y) {
214
- this._width = size.x;
215
- this._height = size.y;
216
-
217
- this._el.style.width = this._width + 'px';
218
- this._el.style.height = this._height + 'px';
219
-
220
- this._heatmap._renderer.setDimensions(this._width, this._height);
221
- }
222
- this._draw();
223
- }
224
- });
225
-
226
- HeatmapOverlay.CSS_TRANSFORM = (function () {
227
- var div = document.createElement('div');
228
- var props = [
229
- 'transform',
230
- 'WebkitTransform',
231
- 'MozTransform',
232
- 'OTransform',
233
- 'msTransform'
234
- ];
235
-
236
- for (var i = 0; i < props.length; i++) {
237
- var prop = props[i];
238
- if (div.style[prop] !== undefined) {
239
- return prop;
240
- }
241
- }
242
- return props[0];
243
- })();
244
-
245
- return HeatmapOverlay;
246
- });
@@ -1 +0,0 @@
1
- .leaflet-image-layer,.leaflet-layer,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-pane,.leaflet-pane>canvas,.leaflet-pane>svg,.leaflet-tile,.leaflet-tile-container,.leaflet-zoom-box{position:absolute;left:0;top:0}.leaflet-container{overflow:hidden}.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.leaflet-tile::selection{background:0 0}.leaflet-safari .leaflet-tile{image-rendering:-webkit-optimize-contrast}.leaflet-safari .leaflet-tile-container{width:1600px;height:1600px;-webkit-transform-origin:0 0}.leaflet-marker-icon,.leaflet-marker-shadow{display:block}.leaflet-container .leaflet-overlay-pane svg{max-width:none!important;max-height:none!important}.leaflet-container .leaflet-marker-pane img,.leaflet-container .leaflet-shadow-pane img,.leaflet-container .leaflet-tile,.leaflet-container .leaflet-tile-pane img,.leaflet-container img.leaflet-image-layer{max-width:none!important;max-height:none!important;width:auto;padding:0}.leaflet-container img.leaflet-tile{mix-blend-mode:plus-lighter}.leaflet-container.leaflet-touch-zoom{-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y}.leaflet-container.leaflet-touch-drag{-ms-touch-action:pinch-zoom;touch-action:none;touch-action:pinch-zoom}.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom{-ms-touch-action:none;touch-action:none}.leaflet-container{-webkit-tap-highlight-color:transparent}.leaflet-container a{-webkit-tap-highlight-color:rgba(51,181,229,.4)}.leaflet-tile{filter:inherit;visibility:hidden}.leaflet-tile-loaded{visibility:inherit}.leaflet-zoom-box{width:0;height:0;-moz-box-sizing:border-box;box-sizing:border-box;z-index:800}.leaflet-overlay-pane svg{-moz-user-select:none}.leaflet-pane{z-index:400}.leaflet-tile-pane{z-index:200}.leaflet-overlay-pane{z-index:400}.leaflet-shadow-pane{z-index:500}.leaflet-marker-pane{z-index:600}.leaflet-tooltip-pane{z-index:650}.leaflet-popup-pane{z-index:700}.leaflet-map-pane canvas{z-index:100}.leaflet-map-pane svg{z-index:200}.leaflet-vml-shape{width:1px;height:1px}.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.leaflet-control{position:relative;z-index:800;pointer-events:visiblePainted;pointer-events:auto}.leaflet-bottom,.leaflet-top{position:absolute;z-index:1000;pointer-events:none}.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-control{float:left;clear:both}.leaflet-right .leaflet-control{float:right}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}.leaflet-left .leaflet-control{margin-left:10px}.leaflet-right .leaflet-control{margin-right:10px}.leaflet-fade-anim .leaflet-popup{opacity:0;-webkit-transition:opacity .2s linear;-moz-transition:opacity .2s linear;transition:opacity .2s linear}.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.leaflet-zoom-animated{-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0}svg.leaflet-zoom-animated{will-change:transform}.leaflet-zoom-anim .leaflet-zoom-animated{-webkit-transition:-webkit-transform .25s cubic-bezier(0,0,.25,1);-moz-transition:-moz-transform .25s cubic-bezier(0,0,.25,1);transition:transform .25s cubic-bezier(0,0,.25,1)}.leaflet-pan-anim .leaflet-tile,.leaflet-zoom-anim .leaflet-tile{-webkit-transition:none;-moz-transition:none;transition:none}.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.leaflet-interactive{cursor:pointer}.leaflet-grab{cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.leaflet-crosshair,.leaflet-crosshair .leaflet-interactive{cursor:crosshair}.leaflet-control,.leaflet-popup-pane{cursor:auto}.leaflet-dragging .leaflet-grab,.leaflet-dragging .leaflet-grab .leaflet-interactive,.leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.leaflet-image-layer,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-pane>svg path,.leaflet-tile-container{pointer-events:none}.leaflet-image-layer.leaflet-interactive,.leaflet-marker-icon.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive,svg.leaflet-image-layer.leaflet-interactive path{pointer-events:visiblePainted;pointer-events:auto}.leaflet-container{background:#ddd;outline-offset:1px}.leaflet-container a{color:#0078a8}.leaflet-zoom-box{border:2px dotted #38f;background:rgba(255,255,255,.5)}.leaflet-container{font-family:"Helvetica Neue",Arial,Helvetica,sans-serif;font-size:12px;font-size:.75rem;line-height:1.5}.leaflet-bar{box-shadow:0 1px 5px rgba(0,0,0,.65);border-radius:4px}.leaflet-bar a{background-color:#fff;border-bottom:1px solid #ccc;width:26px;height:26px;line-height:26px;display:block;text-align:center;text-decoration:none;color:#000}.leaflet-bar a,.leaflet-control-layers-toggle{background-position:50% 50%;background-repeat:no-repeat;display:block}.leaflet-bar a:focus,.leaflet-bar a:hover{background-color:#f4f4f4}.leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom:none}.leaflet-bar a.leaflet-disabled{cursor:default;background-color:#f4f4f4;color:#bbb}.leaflet-touch .leaflet-bar a{width:30px;height:30px;line-height:30px}.leaflet-touch .leaflet-bar a:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.leaflet-touch .leaflet-bar a:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.leaflet-control-zoom-in,.leaflet-control-zoom-out{font:bold 18px 'Lucida Console',Monaco,monospace;text-indent:1px}.leaflet-touch .leaflet-control-zoom-in,.leaflet-touch .leaflet-control-zoom-out{font-size:22px}.leaflet-control-layers{box-shadow:0 1px 5px rgba(0,0,0,.4);background:#fff;border-radius:5px}.leaflet-control-layers-toggle{background-image:url(images/layers.png);width:36px;height:36px}.leaflet-retina .leaflet-control-layers-toggle{background-image:url(images/layers-2x.png);background-size:26px 26px}.leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.leaflet-control-layers .leaflet-control-layers-list,.leaflet-control-layers-expanded .leaflet-control-layers-toggle{display:none}.leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.leaflet-control-layers-expanded{padding:6px 10px 6px 6px;color:#333;background:#fff}.leaflet-control-layers-scrollbar{overflow-y:scroll;overflow-x:hidden;padding-right:5px}.leaflet-control-layers-selector{margin-top:2px;position:relative;top:1px}.leaflet-control-layers label{display:block;font-size:13px;font-size:1.08333em}.leaflet-control-layers-separator{height:0;border-top:1px solid #ddd;margin:5px -10px 5px -6px}.leaflet-default-icon-path{background-image:url(images/marker-icon.png)}.leaflet-container .leaflet-control-attribution{background:#fff;background:rgba(255,255,255,.8);margin:0}.leaflet-control-attribution,.leaflet-control-scale-line{padding:0 5px;color:#333;line-height:1.4}.leaflet-control-attribution a{text-decoration:none}.leaflet-control-attribution a:focus,.leaflet-control-attribution a:hover{text-decoration:underline}.leaflet-attribution-flag{display:inline!important;vertical-align:baseline!important;width:1em;height:.6669em}.leaflet-left .leaflet-control-scale{margin-left:5px}.leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.leaflet-control-scale-line{border:2px solid #777;border-top:none;line-height:1.1;padding:2px 5px 1px;white-space:nowrap;-moz-box-sizing:border-box;box-sizing:border-box;background:rgba(255,255,255,.8);text-shadow:1px 1px #fff}.leaflet-control-scale-line:not(:first-child){border-top:2px solid #777;border-bottom:none;margin-top:-2px}.leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.leaflet-touch .leaflet-bar,.leaflet-touch .leaflet-control-attribution,.leaflet-touch .leaflet-control-layers{box-shadow:none}.leaflet-touch .leaflet-bar,.leaflet-touch .leaflet-control-layers{border:2px solid rgba(0,0,0,.2);background-clip:padding-box}.leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}.leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:12px}.leaflet-popup-content{margin:13px 24px 13px 20px;line-height:1.3;font-size:13px;font-size:1.08333em;min-height:1px}.leaflet-popup-content p{margin:17px 0;margin:1.3em 0}.leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-top:-1px;margin-left:-20px;overflow:hidden;pointer-events:none}.leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;pointer-events:auto;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#fff;color:#333;box-shadow:0 3px 14px rgba(0,0,0,.4)}.leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;border:none;text-align:center;width:24px;height:24px;font:16px/24px Tahoma,Verdana,sans-serif;color:#757575;text-decoration:none;background:0 0}.leaflet-container a.leaflet-popup-close-button:focus,.leaflet-container a.leaflet-popup-close-button:hover{color:#585858}.leaflet-popup-scrolled{overflow:auto}.leaflet-oldie .leaflet-popup-content-wrapper{-ms-zoom:1}.leaflet-oldie .leaflet-popup-tip{width:24px;margin:0 auto}.leaflet-oldie .leaflet-control-layers,.leaflet-oldie .leaflet-control-zoom,.leaflet-oldie .leaflet-popup-content-wrapper,.leaflet-oldie .leaflet-popup-tip{border:1px solid #999}.leaflet-div-icon{background:#fff;border:1px solid #666}.leaflet-tooltip{position:absolute;padding:6px;background-color:#fff;border:1px solid #fff;border-radius:3px;color:#222;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;box-shadow:0 1px 3px rgba(0,0,0,.4)}.leaflet-tooltip.leaflet-interactive{cursor:pointer;pointer-events:auto}.leaflet-tooltip-bottom:before,.leaflet-tooltip-left:before,.leaflet-tooltip-right:before,.leaflet-tooltip-top:before{position:absolute;pointer-events:none;border:6px solid transparent;background:0 0;content:""}.leaflet-tooltip-bottom{margin-top:6px}.leaflet-tooltip-top{margin-top:-6px}.leaflet-tooltip-bottom:before,.leaflet-tooltip-top:before{left:50%;margin-left:-6px}.leaflet-tooltip-top:before{bottom:0;margin-bottom:-12px;border-top-color:#fff}.leaflet-tooltip-bottom:before{top:0;margin-top:-12px;margin-left:-6px;border-bottom-color:#fff}.leaflet-tooltip-left{margin-left:-6px}.leaflet-tooltip-right{margin-left:6px}.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{top:50%;margin-top:-6px}.leaflet-tooltip-left:before{right:0;margin-right:-12px;border-left-color:#fff}.leaflet-tooltip-right:before{left:0;margin-left:-12px;border-right-color:#fff}@media print{.leaflet-control{-webkit-print-color-adjust:exact;print-color-adjust:exact}}