commit 4d0eb5dffd1b3856536d2c9158c20e7fba33fca7 Author: نویسندگانِ منظر Date: Sun Nov 1 11:39:32 2026 +0100 منظر — نخستین نگارش diff --git a/README.md b/README.md new file mode 100644 index 0000000..d996684 --- /dev/null +++ b/README.md @@ -0,0 +1,20 @@ +# منظر + +کتابخانهٔ نقشهٔ لغزانِ سبک‌وزن و بی‌وابستگی، با پیش‌فرضِ پایهٔ نقشهٔ «پایهٔ نقشه». + +## به‌کارگیری + +```html + +
+ + +``` + +کاشی‌های پایهٔ نقشه: `https://payehnaghsheh.damanehazmayesh.ir/{z}/{x}/{y}.png` + +نمونهٔ زنده: [payehnaghsheh.damanehazmayesh.ir](https://payehnaghsheh.damanehazmayesh.ir/) + +© نویسندگانِ منظر diff --git a/demo.html b/demo.html new file mode 100644 index 0000000..2380150 --- /dev/null +++ b/demo.html @@ -0,0 +1,6 @@ + + +پایهٔ نقشه + +
+ diff --git a/manzar.min.css b/manzar.min.css new file mode 100644 index 0000000..30867d5 --- /dev/null +++ b/manzar.min.css @@ -0,0 +1,2 @@ + +.mz-naghshe{position:relative;overflow:hidden;touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;cursor:grab;background:#f7f3e7;font-family:"Vazirmatn","Segoe UI",system-ui,sans-serif;-webkit-tap-highlight-color:transparent}.mz-naghshe.mz-dast-basteh{cursor:grabbing}.mz-daman{position:absolute;inset:0}.mz-daman-kashiha{z-index:0}.mz-daman-neshanha,.mz-daman-roo{pointer-events:none}.mz-naghshe.mz-jonoob-bala>.mz-daman{transform:rotate(180deg)}.mz-boom{pointer-events:none;overflow:visible}.mz-boom .mz-bardari{pointer-events:auto;cursor:pointer}.mz-kashi{position:absolute;width:257px;height:257px;user-select:none;-webkit-user-drag:none;pointer-events:none;opacity:0;transition:opacity .14s linear}.mz-kashi.mz-kashi-amadeh{opacity:1}.mz-kashi.mz-kashi-fori{transition:none}.mz-traz{position:absolute;left:0;top:0;width:0;height:0;transform-origin:0 0;will-change:transform}.mz-kashi.mz-kashi-khali{filter:saturate(0.75) brightness(1.02)}.mz-kashi.mz-kashi-pishnamayesh{filter:saturate(0.7) brightness(1.03)}.mz-goosheh{position:absolute;z-index:6;display:flex;flex-direction:column;gap:8px}.mz-goosheh-balaChap{top:10px;left:10px}.mz-goosheh-balaRast{top:10px;right:10px;align-items:flex-end}.mz-goosheh-paainChap{bottom:10px;left:10px}.mz-goosheh-paainRast{bottom:0;right:0;align-items:flex-end}.mz-abzar{background:#fff;box-shadow:0 1px 5px rgba(0,0,0,.3);border-radius:6px}.mz-abzar-zoom{display:flex;flex-direction:column;overflow:hidden}.mz-dokme{width:32px;height:32px;border:0;background:#fff;color:#222;font-size:20px;line-height:1;cursor:pointer;display:block;padding:0}.mz-dokme:hover{background:#f0f3f5}.mz-abzar-zoom .mz-dokme:first-child{border-bottom:1px solid #dde3e8}.mz-abzar-etebar{background:rgba(255,255,255,.85);font-size:11px;color:#333;padding:2px 6px;border-radius:4px 0 0 0;box-shadow:none;display:flex;align-items:center;gap:5px;direction:ltr}.mz-etebar-dadeh{color:#444}.mz-barand{display:inline-flex;align-items:center;gap:3px;white-space:nowrap}.mz-barand .mz-copy{color:#555}.mz-barand-naam{color:#0e8f86;font-weight:700;text-decoration:none}.mz-barand-naam:hover{text-decoration:underline}.mz-parcham{display:inline-block;vertical-align:middle;border-radius:1px;box-shadow:0 0 0 .5px rgba(0,0,0,.15)}.mz-abzar-meghyas{background:none;box-shadow:none}.mz-meghyas-mile{border:2px solid #333;border-top:none;background:rgba(255,255,255,.55);color:#222;font-size:10px;line-height:1.6;text-align:center;padding:0 4px;white-space:nowrap}.mz-abzar-layeGozin{padding:8px 10px;font-size:12px;min-width:120px}.mz-layeGozin-radif{display:flex;align-items:center;gap:4px;padding:2px 0;cursor:pointer}.mz-layeGozin-marz{border-top:1px solid #e2e7ea;margin:6px 0}.mz-abzar-layeha{overflow:hidden}.mz-layeha-neshan{width:34px;height:34px;border:0;background:#fff;color:#0e8f86;cursor:pointer;display:none;align-items:center;justify-content:center;padding:0}.mz-layeha-neshan:hover{background:#f0f3f5}.mz-abzar-layeha.mz-layeha-jam .mz-layeha-neshan{display:flex}.mz-abzar-layeha.mz-layeha-jam .mz-layeha-tablo{display:none}.mz-abzar-layeha.mz-layeha-jam.mz-layeha-baz .mz-layeha-neshan{display:none}.mz-abzar-layeha.mz-layeha-jam.mz-layeha-baz .mz-layeha-tablo{display:block}.mz-layeha-tablo{padding:9px 11px;font-size:12px;min-width:168px}.mz-layeha-radif{display:flex;align-items:center;gap:8px;padding:3px 0}.mz-layeha-barchasb{display:flex;align-items:center;gap:5px;cursor:pointer;flex:1 1 auto;min-width:0}.mz-layeha-naam{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mz-layeha-lang{flex:0 0 46px;width:46px;height:3px;cursor:pointer;accent-color:#0e8f86}.mz-layeha-marz{border-top:1px solid #e2e7ea;margin:7px 0}.mz-pushtesh-tasvir{position:absolute;pointer-events:none;user-select:none;-webkit-user-drag:none}.mz-neshan{position:absolute;pointer-events:auto}.mz-neshan.mz-neshan-keshidani{cursor:move}.mz-neshan-tasvir{position:absolute}.mz-sanjagh-jaa{transform:translate(-50%,-100%);cursor:pointer}.mz-sanjagh{display:block;width:18px;height:18px;border-radius:50% 50% 50% 0;background:var(--mz-rang,#0e8f86);transform:rotate(-45deg);border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.4)}.mz-panjere{-webkit-user-select:text;user-select:text;position:absolute;z-index:10;transform:translate(-50%,-100%);background:#fff;border-radius:10px;box-shadow:0 2px 14px rgba(0,0,0,.25);min-width:80px;pointer-events:auto}.mz-panjere-badaneh{padding:11px 28px 11px 13px;font-size:13px;color:#1b2733;line-height:1.55}.mz-panjere-nok{position:absolute;bottom:-8px;left:50%;transform:translateX(-50%);width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #fff;filter:drop-shadow(0 2px 1px rgba(0,0,0,.12))}.mz-panjere-bastan{position:absolute;top:4px;right:6px;border:0;background:none;font-size:17px;line-height:1;color:#8a97a3;cursor:pointer;padding:0}.mz-panjere-bastan:hover{color:#3a4753}.mz-namak{position:absolute;z-index:9;pointer-events:none;background:#fff;color:#1b2733;font-size:12px;padding:3px 8px;border-radius:5px;box-shadow:0 1px 6px rgba(0,0,0,.2);white-space:nowrap;unicode-bidi:plaintext}.mz-namak-bala{transform:translate(-50%,-100%)}.mz-namak-paain{transform:translate(-50%,0)}.mz-namak-rast{transform:translate(0,-50%)}.mz-mantaghe{position:absolute;pointer-events:none;z-index:3;transform:translate(-50%,-50%);text-align:center;white-space:nowrap;color:#2b333c;text-shadow:0 0 2px rgba(255,255,255,.95),0 0 5px rgba(255,255,255,.85),0 0 11px rgba(255,255,255,.55),0 1px 1px rgba(255,255,255,.9);transition:opacity .35s ease}.mz-mantaghe-en,.mz-mantaghe-fa{display:block;line-height:1.32}.mz-mantaghe-fa{unicode-bidi:plaintext;direction:rtl;letter-spacing:normal;font-feature-settings:"liga" 1,"calt" 1}.mz-mantaghe-en,.mz-mantaghe-fa{font-family:'Vazirmatn','Noto Naskh Arabic','Noto Sans Arabic',system-ui,sans-serif}.mz-mantaghe-ghareh{opacity:.96}.mz-mantaghe-ghareh .mz-mantaghe-en{font-size:19px;font-weight:500;text-transform:uppercase;letter-spacing:.26em;text-indent:.26em}.mz-mantaghe-ghareh .mz-mantaghe-fa{font-size:15px;font-weight:600;margin-top:2px}.mz-mantaghe-mantaghe{opacity:.92}.mz-mantaghe-mantaghe .mz-mantaghe-en{font-size:13px;font-weight:500;letter-spacing:.1em;text-indent:.1em}.mz-mantaghe-mantaghe .mz-mantaghe-fa{font-size:12px;font-weight:600;margin-top:1px}.mz-mantaghe-barjaste{opacity:1}.mz-mantaghe-barjaste .mz-mantaghe-en{font-size:14px;font-weight:700}.mz-mantaghe-barjaste .mz-mantaghe-fa{font-size:13px;font-weight:700}.mz-mantaghe-abrah{opacity:.97;color:#dff0ff;text-shadow:0 0 2px rgba(6,22,40,.95),0 0 6px rgba(6,22,40,.85),0 0 12px rgba(6,22,40,.6),0 1px 1px rgba(6,22,40,.9)}.mz-mantaghe-abrah .mz-mantaghe-en{font-size:12.5px;font-weight:600;font-style:italic;letter-spacing:.08em;text-indent:.08em}.mz-mantaghe-abrah .mz-mantaghe-fa{font-size:12px;font-weight:600;font-style:italic;margin-top:1px}.mz-namak-chap{transform:translate(-100%,-50%)}.mz-gis-khalase{max-width:min(360px,82vw);background:rgba(255,255,255,.95);color:#1b2733;border-radius:10px;padding:9px 11px;font-size:12.5px;line-height:1.6;box-shadow:0 2px 14px rgba(0,0,0,.22);pointer-events:auto;max-height:42vh;overflow:auto}.mz-gis-soal{font-weight:700;font-size:12px;color:#5b6b7a;margin-bottom:3px}.mz-gis-matn{font-weight:600}.mz-gis-yaddasht{margin-top:6px;padding:5px 7px;border-radius:7px;background:#eef4fb;color:#24506f;font-size:11.5px}.mz-gis-ekhtar{margin-top:6px;padding:5px 7px;border-radius:7px;font-size:11.5px;border-right:3px solid #b9c4cf;background:#f2f5f8;color:#33404d}.mz-gis-ekhtar-warning{border-right-color:#e8a13c;background:#fdf4e6;color:#6b4a13}.mz-gis-ekhtar-error{border-right-color:#e8453c;background:#fdecea;color:#7a1f19}.mz-gis-manba{margin-top:6px;font-size:11px;color:#6d7c8a}.mz-panjere-gis .mz-panjere-badaneh{padding:10px 13px 10px 28px}.mz-gis-panjere{max-height:46vh;overflow:auto}.mz-gis-titr{font-weight:700;font-size:13.5px;margin-bottom:4px}.mz-gis-naghsh{display:inline-block;font-size:10.5px;font-weight:700;padding:1px 7px;border-radius:999px;color:#fff;background:#e8453c}.mz-gis-naghsh-context{background:#7f8c8d}.mz-gis-naghsh-alarm{background:#ff2d00}.mz-gis-naghsh-route{background:#2d9cdb}.mz-gis-laye{display:inline-block;margin-inline-start:5px;font-size:10.5px;padding:1px 7px;border-radius:999px;background:#eef1f4;color:#4a5866}.mz-gis-jadval{margin-top:7px;border-top:1px solid #eceff2}.mz-gis-radif{display:flex;gap:8px;justify-content:space-between;padding:3px 0;border-bottom:1px solid #f4f6f8;font-size:12px}.mz-gis-kelid{color:#6d7c8a;flex:0 0 auto}.mz-gis-meghdar{color:#1b2733;text-align:left;word-break:break-word}.mz-gis-tohi{padding:4px 0;color:#8a97a3;font-size:12px} diff --git a/manzar.min.js b/manzar.min.js new file mode 100644 index 0000000..e0da42b --- /dev/null +++ b/manzar.min.js @@ -0,0 +1,2227 @@ +/*! منظر — © نویسندگانِ منظر */ +(function (jahan, sazande) { +if (typeof module === 'object' && module.exports) module.exports = sazande(); +else if (typeof define === 'function' && define.amd) define(sazande); +else jahan.Manzar = sazande(); +}(typeof self !== 'undefined' ? self : this, function () { +'use strict'; +var ANDAZE_KASHI = 256; +var KASHI_PISHFARZ = 'https://payehnaghsheh.damanehazmayesh.ir/{z}/{x}/{y}.png'; +var ETEBAR_DADEH = '© رصد زمین'; +var RADIAN = Math.PI / 180; +var NESKHE = '2.4.2'; +var PARCHAM_FELESTIN = +'' + +'' + +'' + +'' + +'' + +''; +function mahdud(meghdar, kaf, saghf) { +return meghdar < kaf ? kaf : (meghdar > saghf ? saghf : meghdar); +} +var QAB_PAYEH = 1000 / 60; +function zamanAknoon() { +return (typeof performance !== 'undefined' && performance.now) ? performance.now() : Date.now(); +} +function sakhtOnsor(barchasb, kelas, valed) { +var o = document.createElement(barchasb); +if (kelas) o.className = kelas; +if (valed) valed.appendChild(o); +return o; +} +function darham(payeh, roo) { +var natije = {}, kelid; +for (kelid in payeh) if (payeh.hasOwnProperty(kelid)) natije[kelid] = payeh[kelid]; +if (roo) for (kelid in roo) if (roo.hasOwnProperty(kelid)) natije[kelid] = roo[kelid]; +return natije; +} +function joftMokhtasat(v) { +return v && typeof v[0] === 'number' && typeof v[1] === 'number'; +} +function narmesh(t) { return 1 - Math.pow(1 - t, 3); } +var KASH_KASHI_SAGHF = (function () { +var hafezeh = (typeof navigator !== 'undefined' && navigator.deviceMemory) || 8; +return hafezeh <= 2 ? 120 : (hafezeh <= 4 ? 240 : 480); +})(); +var kashKashi = (typeof Map !== 'undefined') ? new Map() : null; +var kashKashiSaadeh = {}; +var _gerehNeshani = null; +function kelidKash(neshani) { +if (!_gerehNeshani) _gerehNeshani = document.createElement('a'); +_gerehNeshani.href = neshani; +return _gerehNeshani.href; +} +function kashKashiSet(neshani, img) { +var kelidKamel = kelidKash(neshani); +if (kashKashi) { +if (kashKashi.has(kelidKamel)) kashKashi.delete(kelidKamel); +kashKashi.set(kelidKamel, img); +while (kashKashi.size > KASH_KASHI_SAGHF) { +var kohanTarin = kashKashi.keys().next().value; +kashKashi.delete(kohanTarin); +} +} else { +kashKashiSaadeh[kelidKamel] = img; +} +} +function kashKashiGet(neshani) { +var kelidKamel = kelidKash(neshani); +if (kashKashi) { +var img = kashKashi.get(kelidKamel); +if (img) { kashKashi.delete(kelidKamel); kashKashi.set(kelidKamel, img); } +return img; +} +return kashKashiSaadeh[kelidKamel]; +} +function kashKashiHazf(neshani) { +var kelidKamel = kelidKash(neshani); +if (kashKashi) kashKashi.delete(kelidKamel); else delete kashKashiSaadeh[kelidKamel]; +} +function kashKashiNegah(neshani) { +var kelidKamel = kelidKash(neshani); +return kashKashi ? kashKashi.get(kelidKamel) : kashKashiSaadeh[kelidKamel]; +} +function kashKashiAndazeh() { +if (kashKashi) return kashKashi.size; +var n = 0; for (var k in kashKashiSaadeh) n++; return n; +} +function shabakehKond() { +var c = (typeof navigator !== 'undefined') && (navigator.connection || navigator.mozConnection || navigator.webkitConnection); +if (!c) return 0; +if (c.saveData || c.effectiveType === '2g' || c.effectiveType === 'slow-2g') return 2; +return c.effectiveType === '3g' ? 1 : 0; +} +function Nogte(x, y) { this.x = x; this.y = y; } +Nogte.prototype.jam = function (n) { return new Nogte(this.x + n.x, this.y + n.y); }; +Nogte.prototype.tafrigh = function (n) { return new Nogte(this.x - n.x, this.y - n.y); }; +function Mokan(arz, tool) { this.arz = arz; this.tool = tool; } +Mokan.az = function (v) { +if (v instanceof Mokan) return v; +if (joftMokhtasat(v)) return new Mokan(v[0], v[1]); +if (v && v.arz != null) return new Mokan(v.arz, v.tool); +return null; +}; +Mokan.prototype.baArayeh = function () { return [this.arz, this.tool]; }; +Mokan.prototype.barabar = function (m) { +m = Mokan.az(m); +return m && Math.abs(this.arz - m.arz) < 1e-9 && Math.abs(this.tool - m.tool) < 1e-9; +}; +Mokan.prototype.faseleh = function (m) { +m = Mokan.az(m); +var R = 6371000; +var d1 = this.arz * RADIAN, d2 = m.arz * RADIAN; +var da = (m.arz - this.arz) * RADIAN, dt = (m.tool - this.tool) * RADIAN; +var a = Math.sin(da / 2) * Math.sin(da / 2) + +Math.cos(d1) * Math.cos(d2) * Math.sin(dt / 2) * Math.sin(dt / 2); +return 2 * R * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); +}; +function Karan(jonoobGharb, shomalShargh) { +this.jg = Mokan.az(jonoobGharb); +this.ss = Mokan.az(shomalShargh); +} +Karan.az = function (fehrest) { +var kamArz = Infinity, kamTool = Infinity, ziadArz = -Infinity, ziadTool = -Infinity; +for (var i = 0; i < fehrest.length; i++) { +var m = Mokan.az(fehrest[i]); +if (!m) continue; +if (m.arz < kamArz) kamArz = m.arz; +if (m.arz > ziadArz) ziadArz = m.arz; +if (m.tool < kamTool) kamTool = m.tool; +if (m.tool > ziadTool) ziadTool = m.tool; +} +return new Karan([kamArz, kamTool], [ziadArz, ziadTool]); +}; +Karan.prototype.markaz = function () { +return new Mokan((this.jg.arz + this.ss.arz) / 2, (this.jg.tool + this.ss.tool) / 2); +}; +Karan.prototype.gostaresh = function (nesbat) { +var da = (this.ss.arz - this.jg.arz) * nesbat; +var dt = (this.ss.tool - this.jg.tool) * nesbat; +return new Karan([this.jg.arz - da, this.jg.tool - dt], [this.ss.arz + da, this.ss.tool + dt]); +}; +Karan.prototype.darbardarad = function (m) { +m = Mokan.az(m); +return m.arz >= this.jg.arz && m.arz <= this.ss.arz && +m.tool >= this.jg.tool && m.tool <= this.ss.tool; +}; +function tasvir(arz, tool, bz) { +var meghyas = ANDAZE_KASHI * Math.pow(2, bz); +var s = mahdud(Math.sin(arz * RADIAN), -0.9999, 0.9999); +return new Nogte( +(tool + 180) / 360 * meghyas, +(0.5 - Math.log((1 + s) / (1 - s)) / (4 * Math.PI)) * meghyas +); +} +function vaTasvir(x, y, bz) { +var meghyas = ANDAZE_KASHI * Math.pow(2, bz); +var n = Math.PI - 2 * Math.PI * (y / meghyas); +return new Mokan( +180 / Math.PI * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n))), +x / meghyas * 360 - 180 +); +} +var ARZ_MARKATOR_HAD = 85.05112878; +function mokanNormal(mokan) { +var tool = ((mokan.tool + 180) % 360 + 360) % 360 - 180; +var arz = mahdud(mokan.arz, -ARZ_MARKATOR_HAD, ARZ_MARKATOR_HAD); +return new Mokan(arz, tool); +} +function Nashani() { this._goosh = {}; } +Nashani.prototype.on = function (naam, kar, hamin) { +var haa = (naam || '').split(' '); +for (var i = 0; i < haa.length; i++) { +if (!haa[i]) continue; +(this._goosh[haa[i]] = this._goosh[haa[i]] || []).push({ kar: kar, hamin: hamin || this }); +} +return this; +}; +Nashani.prototype.off = function (naam, kar) { +if (!naam) { this._goosh = {}; return this; } +var list = this._goosh[naam]; +if (!list) return this; +if (!kar) { delete this._goosh[naam]; return this; } +for (var i = list.length - 1; i >= 0; i--) if (list[i].kar === kar) list.splice(i, 1); +return this; +}; +Nashani.prototype.yekbar = function (naam, kar, hamin) { +var khod = this; +function poosh() { khod.off(naam, poosh); kar.apply(hamin || khod, arguments); } +return this.on(naam, poosh, hamin); +}; +Nashani.prototype.partab = function (naam, dadeh) { +var list = this._goosh[naam]; +if (!list) return this; +dadeh = dadeh || {}; +dadeh.gooneh = naam; +dadeh.hadaf = dadeh.hadaf || this; +var kopi = list.slice(); +for (var i = 0; i < kopi.length; i++) kopi[i].kar.call(kopi[i].hamin, dadeh); +return this; +}; +Nashani.prototype.darad = function (naam) { +return !!(this._goosh[naam] && this._goosh[naam].length); +}; +function baRoydad(sazande) { +for (var k in Nashani.prototype) { +if (Nashani.prototype.hasOwnProperty(k)) sazande.prototype[k] = Nashani.prototype[k]; +} +} +function Laye() { Nashani.call(this); } +baRoydad(Laye); +Laye.prototype.afzoodanBe = function (naghshe) { +this._naghshe = naghshe; +naghshe._sabtLaye(this); +if (this._benshan) this._benshan(); +this.partab('afzoodan', { laye: this }); +return this; +}; +Laye.prototype.hazf = function () { +if (!this._naghshe) return this; +if (this._bardar) this._bardar(); +this._naghshe._hazfLaye(this); +this.partab('hazf', { laye: this }); +this._naghshe = null; +return this; +}; +Laye.prototype.roiNaghshe = function () { return !!this._naghshe; }; +function LayeKashi(nesahni, gozineh) { +Laye.call(this); +this._nesahni = nesahni || KASHI_PISHFARZ; +this.g = darham({ +kamZoom: 0, ziadZoom: 19, shefafiat: 1, +etebar: '', zirdaman: null, kelasKashi: '', +kamZoomBoomi: null, ziadZoomBoomi: null, +tizNama: false, +hamzamani: null, +pishVakeshiBikar: true +}, gozineh); +this._kashiha = {}; +this._trazha = {}; +this._saf = []; +this._rezerv = {}; +this._bikarDarRah = {}; +this._darRah = 0; +this._hamzamani = this.g.hamzamani || (shabakehKond() ? KASHI_HAMZAMANI_KOND : KASHI_HAMZAMANI); +this._amar = { darkhast: 0, residan: 0, khata: 0, talashDobareh: 0, laghv: 0, laghvSaf: 0, azKash: 0, niya: 0, poshtiban: 0, pishVakeshi: 0 }; +} +LayeKashi.prototype = Object.create(Laye.prototype); +LayeKashi.prototype.constructor = LayeKashi; +LayeKashi.prototype._benshan = function () { +var n = this._naghshe; +this._daman = sakhtOnsor('div', 'mz-daman mz-daman-kashi', n._damanKashi); +this._daman.style.opacity = this.g.shefafiat; +if (this.g.etebar && n._etebarAbzar) n._etebarAbzar.afzoodan(this.g.etebar); +var khod = this; +this._barKhat = function () { +for (var k in khod._kashiha) { +var rec = khod._kashiha[k]; +if (rec.vaz === 4) { rec.vaz = 0; rec.talash = 0; rec.dor = (rec.dor || 0) + 1; rec.sakhtAz = zamanAknoon(); khod._saf.push(rec); } +} +khod.tazeh(); +}; +if (window.addEventListener) window.addEventListener('online', this._barKhat); +this.tazeh(); +}; +LayeKashi.prototype._bardar = function () { +this._pakHame(); +if (this._tzZamansanj) { clearTimeout(this._tzZamansanj); this._tzZamansanj = null; } +if (this._bikar) { clearTimeout(this._bikar); this._bikar = null; } +if (this._barKhat && window.removeEventListener) window.removeEventListener('online', this._barKhat); +if (this._daman && this._daman.parentNode) this._daman.parentNode.removeChild(this._daman); +this._daman = null; this._mabdaGhabli = null; +}; +LayeKashi.prototype._zirdaman = function (x, y) { +var s = this.g.zirdaman; +if (!s) return ''; +if (typeof s === 'string') s = s.split(''); +return s[Math.abs(x + y) % s.length]; +}; +LayeKashi.prototype._neshaniKashi = function (z, x, y) { +return this._nesahni +.replace('{z}', z).replace('{x}', x).replace('{y}', y) +.replace('{s}', this._zirdaman(x, y)); +}; +var KASHI_HAMZAMANI = 16; +var KASHI_HAMZAMANI_KOND = 6; +var KASHI_TALASH_DOBAREH = 3; +var KASHI_TAKHIR_DOBAREH = [500, 1500, 4000]; +var KASHI_MOHLAT_BAR = 20000; +var KASHI_AZMOON_DOBAREH = 15000; +var KASHI_MAHV_MS = 140; +var KASHI_ZIAD_NIYA = 5; +var KASHI_ZIAD_FARZAND = 2; +var KASHI_ZHARFA_POSHTIBAN = 3; +var KASHI_MOHLAT_NIYA = 350; +var PISH_VAKESHI_MOHLAT = 900; +var PISH_BAR_MOHLAT = 1600; +var BIKAR_MOHLAT = 450; +var TASVIR_TOHI = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs='; +function kelidKashi(z, x, y) { return z + '/' + x + '/' + y; } +function pichesh(x, tedad) { return ((x % tedad) + tedad) % tedad; } +function bazehKashi(mx, my, pahna, boland, z, hashieh) { +var tedad = Math.pow(2, z); +return { +x0: Math.floor(mx / ANDAZE_KASHI) - hashieh, +x1: Math.floor((mx + pahna) / ANDAZE_KASHI) + hashieh, +y0: Math.max(0, Math.floor(my / ANDAZE_KASHI) - hashieh), +y1: Math.min(tedad - 1, Math.floor((my + boland) / ANDAZE_KASHI) + hashieh), +tedad: tedad +}; +} +function gozineshPooshesh(khasteh, vaziat, azKash, kamTraz, ziadTraz) { +var negah = {}, biPooshesh = []; +var farzandan = function (z, x, y, d) { +if (d === 0 || z + 1 > ziadTraz) return false; +var kamel = true; +for (var a = 0; a < 2; a++) { +for (var b = 0; b < 2; b++) { +var fx = x * 2 + a, fy = y * 2 + b; +if (vaziat(z + 1, fx, fy) === 2) negah[kelidKashi(z + 1, fx, fy)] = true; +else if (!farzandan(z + 1, fx, fy, d - 1)) kamel = false; +} +} +return kamel; +}; +for (var i = 0; i < khasteh.length; i++) { +var k = khasteh[i]; +if (vaziat(k.z, k.x, k.y) === 2) continue; +if (farzandan(k.z, k.x, k.y, KASHI_ZIAD_FARZAND)) continue; +var poosh = false, darRah = false; +for (var d = 1; d <= KASHI_ZIAD_NIYA && !poosh; d++) { +var nz = k.z - d; +if (nz < kamTraz) break; +var t = Math.pow(2, d), ax = Math.floor(k.x / t), ay = Math.floor(k.y / t); +var v = vaziat(nz, ax, ay); +if (v === 0 && azKash && azKash(nz, ax, ay)) v = 2; +if (v === 2) { negah[kelidKashi(nz, ax, ay)] = true; poosh = true; } +else if (v === 3 && d <= 2 && !darRah) { negah[kelidKashi(nz, ax, ay)] = true; darRah = true; } +} +if (!poosh) biPooshesh.push(k); +} +return { negah: negah, biPooshesh: biPooshesh }; +} +LayeKashi.prototype._bazehBoomi = function () { +var g = this.g; +return { +kam: g.kamZoomBoomi == null ? g.kamZoom : g.kamZoomBoomi, +ziad: g.ziadZoomBoomi == null ? g.ziadZoom : g.ziadZoomBoomi +}; +}; +LayeKashi.prototype._trazKashi = function (z) { +var b = this._bazehBoomi(); +var ezafe = (this.g.tizNama && (window.devicePixelRatio || 1) >= 1.5) ? 1 : 0; +return mahdud(z + ezafe, b.kam, b.ziad); +}; +LayeKashi.prototype._trazChideman = function () { +var n = this._naghshe; +var z = n._charkhPaye != null ? n._charkhPaye : Math.round(n._bozorgnamai); +var c = tasvir(n._markazMokan.arz, n._markazMokan.tool, z); +return { z: z, mabda: new Nogte(c.x - n._pahna / 2, c.y - n._boland / 2) }; +}; +LayeKashi.prototype._traz = function (L, mx, my) { +var tr = this._trazha[L]; +if (!tr) { +tr = this._trazha[L] = { +z: L, shomar: 0, tar: '', +ox: Math.floor(mx / ANDAZE_KASHI) * ANDAZE_KASHI, +oy: Math.floor(my / ANDAZE_KASHI) * ANDAZE_KASHI, +el: sakhtOnsor('div', 'mz-traz', this._daman) +}; +tr.el.style.zIndex = L; +tr.el.setAttribute('data-tr', L); +} +return tr; +}; +LayeKashi.prototype._chidanTrazha = function (z, mabda) { +var dpr = window.devicePixelRatio || 1; +for (var L in this._trazha) { +var tr = this._trazha[L], s = Math.pow(2, z - tr.z); +var X = tr.ox * s - mabda.x, Y = tr.oy * s - mabda.y; +if (Math.abs(X) > 4e6 || Math.abs(Y) > 4e6) { +this._bazPayeh(tr, mabda.x / s, mabda.y / s); +X = tr.ox * s - mabda.x; Y = tr.oy * s - mabda.y; +} +var tar = 'translate3d(' + (Math.round(X * dpr) / dpr) + 'px,' + (Math.round(Y * dpr) / dpr) + 'px,0)' + +(s === 1 ? '' : ' scale(' + s + ')'); +if (tr.tar !== tar) { tr.el.style.transform = tar; tr.tar = tar; } +} +}; +LayeKashi.prototype._bazPayeh = function (tr, mx, my) { +tr.ox = Math.floor(mx / ANDAZE_KASHI) * ANDAZE_KASHI; +tr.oy = Math.floor(my / ANDAZE_KASHI) * ANDAZE_KASHI; +for (var k in this._kashiha) { +var rec = this._kashiha[k]; +if (rec.z !== tr.z) continue; +rec.el.style.left = (rec.x * ANDAZE_KASHI - tr.ox) + 'px'; +rec.el.style.top = (rec.y * ANDAZE_KASHI - tr.oy) + 'px'; +} +}; +LayeKashi.prototype._jabejaJahan = function (z, mabda) { +var p = this._mabdaGhabli; +this._mabdaGhabli = { x: mabda.x, z: z }; +if (!p) return; +var k = Math.round((mabda.x - p.x * Math.pow(2, z - p.z)) / (ANDAZE_KASHI * Math.pow(2, z))); +if (!k) return; +var no = {}, rez = {}; +for (var kelid in this._kashiha) { +var rec = this._kashiha[kelid]; +rec.x += k * Math.pow(2, rec.z); +rec.kelid = kelidKashi(rec.z, rec.x, rec.y); +if (this._rezerv[kelid] != null) rez[rec.kelid] = this._rezerv[kelid]; +no[rec.kelid] = rec; +} +this._kashiha = no; this._rezerv = rez; +for (var L in this._trazha) { this._trazha[L].ox += k * ANDAZE_KASHI * Math.pow(2, +L); this._trazha[L].tar = ''; } +}; +LayeKashi.prototype._sakhtKashi = function (z, x, y, olaviat) { +var kelid = kelidKashi(z, x, y), rec = this._kashiha[kelid]; +if (rec) return rec; +var tr = this._trazha[z], wx = pichesh(x, Math.pow(2, z)); +var neshani = this._neshaniKashi(z, wx, y); +rec = { z: z, x: x, y: y, wx: wx, kelid: kelid, neshani: neshani, vaz: 0, talash: 0, +amadehAz: 0, sakhtAz: zamanAknoon(), ol: olaviat == null ? 0 : olaviat, didani: false }; +var el = kashKashiGet(neshani); +if (el && el.complete && el.naturalWidth > 0) { +kashKashiHazf(neshani); +el.className = 'mz-kashi mz-kashi-fori mz-kashi-amadeh ' + this.g.kelasKashi; +rec.vaz = 2; this._amar.azKash++; +} else { +el = document.createElement('img'); +el.className = 'mz-kashi ' + this.g.kelasKashi; +el.alt = ''; el.decoding = 'async'; +el.setAttribute('draggable', 'false'); +this._saf.push(rec); +} +el.setAttribute('data-tr', z); +el.style.left = (x * ANDAZE_KASHI - tr.ox) + 'px'; +el.style.top = (y * ANDAZE_KASHI - tr.oy) + 'px'; +rec.el = el; +tr.el.appendChild(el); tr.shomar++; +this._kashiha[kelid] = rec; +return rec; +}; +LayeKashi.prototype._pishSaf = function () { +var saf = this._saf; +while (this._darRah < this._hamzamani && saf.length) { +var rec = saf.shift(); +if (rec.raft || rec.vaz !== 0) continue; +this._aghazBar(rec); +} +}; +LayeKashi.prototype._aghazBar = function (rec) { +var khod = this, el = rec.el; +rec.vaz = 1; this._darRah++; this._amar.darkhast++; +if (!rec.goosh) { +rec.goosh = true; +el.addEventListener('load', function () { khod._residKashi(rec); }); +el.addEventListener('error', function () { khod._khataKashi(rec); }); +} +rec.mohlat = setTimeout(function () { rec.mohlat = null; khod._khataKashi(rec); }, KASHI_MOHLAT_BAR); +el.src = rec.talash +? rec.neshani + (rec.neshani.indexOf('?') === -1 ? '?' : '&') + '_r=' + rec.talash + (rec.dor ? '-' + rec.dor : '') +: rec.neshani; +}; +LayeKashi.prototype._residKashi = function (rec) { +if (rec.raft || rec.vaz !== 1) return; +var khod = this, el = rec.el; +if (!(el.naturalWidth > 0)) { this._khataKashi(rec); return; } +if (rec.mohlat) { clearTimeout(rec.mohlat); rec.mohlat = null; } +this._darRah--; rec.vaz = 5; +var amadeh = function () { +if (rec.raft || rec.vaz !== 5) return; +rec.vaz = 2; rec.amadehAz = zamanAknoon(); khod._amar.residan++; +el.classList.add('mz-kashi-amadeh'); +khod._tazehBaTakhir(KASHI_MAHV_MS + 30); +}; +if (el.decode) el.decode().then(amadeh, amadeh); else amadeh(); +this._pishSaf(); +}; +LayeKashi.prototype._khataKashi = function (rec) { +if (rec.raft || rec.vaz !== 1) return; +var khod = this; +if (rec.mohlat) { clearTimeout(rec.mohlat); rec.mohlat = null; } +this._darRah--; +if (rec.talash < KASHI_TALASH_DOBAREH) { +var takhir = KASHI_TAKHIR_DOBAREH[rec.talash] || 4000; +rec.talash++; rec.vaz = 3; this._amar.talashDobareh++; +rec.zamansanj = setTimeout(function () { +rec.zamansanj = null; +if (rec.raft) return; +rec.vaz = 0; khod._saf.unshift(rec); khod._pishSaf(); +}, takhir); +} else { +rec.vaz = 4; rec.khataAz = zamanAknoon(); this._amar.khata++; +this._tazehBaTakhir(0); +} +this._pishSaf(); +}; +LayeKashi.prototype._bardashtanKashi = function (rec) { +var el = rec.el, vaz = rec.vaz; +rec.raft = true; +if (rec.zamansanj) { clearTimeout(rec.zamansanj); rec.zamansanj = null; } +if (rec.mohlat) { clearTimeout(rec.mohlat); rec.mohlat = null; } +if (el.parentNode) el.parentNode.removeChild(el); +if (vaz === 1) { +this._darRah--; this._amar.laghv++; +el.src = TASVIR_TOHI; +} else if (vaz === 0 || vaz === 3) { +this._amar.laghvSaf++; +} else if (vaz === 2) { +el.style.left = ''; el.style.top = ''; +kashKashiSet(rec.neshani, el); +} +var tr = this._trazha[rec.z]; +if (tr && --tr.shomar <= 0) { +if (tr.el.parentNode) tr.el.parentNode.removeChild(tr.el); +delete this._trazha[rec.z]; +} +delete this._kashiha[rec.kelid]; +}; +LayeKashi.prototype._pakHame = function () { +for (var k in this._kashiha) this._bardashtanKashi(this._kashiha[k]); +this._saf.length = 0; this._rezerv = {}; +}; +LayeKashi.prototype.tazeh = function () { +var n = this._naghshe; +if (!n || !this._daman) return; +var ch = this._trazChideman(), z = ch.z, mabda = ch.mabda, g = this.g, khod = this; +if (z < g.kamZoom || z > g.ziadZoom) { this._pakHame(); return; } +this._jabejaJahan(z, mabda); +var boomi = this._bazehBoomi(); +var zk = this._trazKashi(z), f = Math.pow(2, zk - z); +var zz = n._zoomZendeh, dx0 = 0, dy0 = 0, dx1 = n._pahna, dy1 = n._boland; +if (zz && zz.s < 1 && zz.s > 0.2) { +dx0 = zz.x - zz.x / zz.s; dy0 = zz.y - zz.y / zz.s; +dx1 = zz.x + (n._pahna - zz.x) / zz.s; dy1 = zz.y + (n._boland - zz.y) / zz.s; +} +var mx = (mabda.x + dx0) * f, my = (mabda.y + dy0) * f, pahna = (dx1 - dx0) * f, boland = (dy1 - dy0) * f; +this._traz(zk, mx, my); +var b = bazehKashi(mx, my, pahna, boland, zk, 1); +var bd = bazehKashi(mx, my, pahna, boland, zk, 0); +var cx = (mx + pahna / 2) / ANDAZE_KASHI - 0.5, cy = (my + boland / 2) / ANDAZE_KASHI - 0.5; +var khasteh = [], khastehK = {}, akoon = zamanAknoon(), rec, tx, ty, shekasteh = false, i; +for (tx = b.x0; tx <= b.x1; tx++) { +for (ty = b.y0; ty <= b.y1; ty++) { +rec = this._sakhtKashi(zk, tx, ty); +rec.didani = tx >= bd.x0 && tx <= bd.x1 && ty >= bd.y0 && ty <= bd.y1; +rec.ol = (tx - cx) * (tx - cx) + (ty - cy) * (ty - cy) + (rec.didani ? 0 : 400); +if (rec.vaz === 4 && akoon - rec.khataAz > KASHI_AZMOON_DOBAREH) { +rec.vaz = 0; rec.talash = KASHI_TALASH_DOBAREH; rec.dor = (rec.dor || 0) + 1; rec.sakhtAz = akoon; +this._saf.push(rec); +} +if (rec.vaz === 4) shekasteh = true; +if (rec.didani) khasteh.push(rec); +khastehK[rec.kelid] = true; +} +} +var vaziat = function (vz, vx, vy) { +var r = khod._kashiha[kelidKashi(vz, vx, vy)]; +if (!r) return 0; +if (r.vaz === 2) return (akoon - r.amadehAz >= KASHI_MAHV_MS) ? 2 : 3; +return (r.vaz === 1 || r.vaz === 5) ? 3 : 1; +}; +var azKash = function (vz, vx, vy) { +var el = kashKashiNegah(khod._neshaniKashi(vz, pichesh(vx, Math.pow(2, vz)), vy)); +if (!(el && el.complete && el.naturalWidth > 0)) return false; +var fv = Math.pow(2, vz - z); +khod._traz(vz, mabda.x * fv, mabda.y * fv); +khod._sakhtKashi(vz, vx, vy); +return true; +}; +var p = gozineshPooshesh(khasteh, vaziat, azKash, boomi.kam, boomi.ziad); +var montazer = false, hameAmadeh = khasteh.length > 0; +for (i = 0; i < khasteh.length; i++) { +if (vaziat(khasteh[i].z, khasteh[i].x, khasteh[i].y) !== 2) { hameAmadeh = false; break; } +} +if (p.biPooshesh.length * 2 >= khasteh.length && khasteh.length) { +for (i = 0; i < p.biPooshesh.length; i++) { +var kp = p.biPooshesh[i], pz = Math.max(boomi.kam, kp.z - KASHI_ZHARFA_POSHTIBAN); +if (pz >= kp.z) continue; +var tp = Math.pow(2, kp.z - pz), px = Math.floor(kp.x / tp), py = Math.floor(kp.y / tp); +var pr = this._kashiha[kelidKashi(pz, px, py)]; +if (!pr) { +var fp = Math.pow(2, pz - z); +this._traz(pz, mabda.x * fp, mabda.y * fp); +pr = this._sakhtKashi(pz, px, py, -2000); +this._amar.poshtiban++; +} +p.negah[pr.kelid] = true; +} +} +var niazmand = p.biPooshesh.slice(); +for (i = 0; i < khasteh.length; i++) if (khasteh[i].vaz === 4 && niazmand.indexOf(khasteh[i]) === -1) niazmand.push(khasteh[i]); +for (i = 0; i < niazmand.length; i++) { +var k = niazmand[i]; +if (k.vaz !== 4 && akoon - k.sakhtAz < KASHI_MOHLAT_NIYA) { montazer = true; continue; } +for (var d = 1; d <= KASHI_ZIAD_NIYA; d++) { +var nz = k.z - d; +if (nz < boomi.kam) break; +var t = Math.pow(2, d), ax = Math.floor(k.x / t), ay = Math.floor(k.y / t); +var nr = this._kashiha[kelidKashi(nz, ax, ay)]; +if (!nr) { +var fn = Math.pow(2, nz - z); +this._traz(nz, mabda.x * fn, mabda.y * fn); +nr = this._sakhtKashi(nz, ax, ay, -1000 + d); +this._amar.niya++; +} +p.negah[nr.kelid] = true; +if (nr.vaz !== 4) break; +} +} +if (n._charkhRaf != null && n._charkhHadaf != null && n._charkhHadaf < z && n._charkhNoghte) { +var sH = Math.pow(2, n._charkhHadaf - z), lang = n._charkhNoghte; +var zp = Math.max(boomi.kam, this._trazKashi(n._charkhHadaf) - 2); +if (zp < zk) { +var fh = Math.pow(2, zp - z); +var hx = (mabda.x + lang.x - lang.x / sH) * fh, hy = (mabda.y + lang.y - lang.y / sH) * fh; +var bh = bazehKashi(hx, hy, n._pahna / sH * fh, n._boland / sH * fh, zp, 0); +this._traz(zp, hx, hy); +for (tx = bh.x0; tx <= bh.x1; tx++) { +for (ty = bh.y0; ty <= bh.y1; ty++) { +rec = this._kashiha[kelidKashi(zp, tx, ty)]; +if (!rec) { rec = this._sakhtKashi(zp, tx, ty, -1500); this._amar.poshtiban++; } +p.negah[rec.kelid] = true; +} +} +} +} +var rez = this._rezerv; +for (var kelid in this._kashiha) { +if (khastehK[kelid] || p.negah[kelid]) continue; +if (rez[kelid] != null) { if (rez[kelid] > akoon) continue; delete rez[kelid]; } +this._bardashtanKashi(this._kashiha[kelid]); +} +if (this._saf.length > 1) this._saf.sort(function (a, c) { return a.ol - c.ol; }); +this._pishSaf(); +for (var L in this._trazha) { +if (this._trazha[L].shomar <= 0) { +if (this._trazha[L].el.parentNode) this._trazha[L].el.parentNode.removeChild(this._trazha[L].el); +delete this._trazha[L]; +} +} +this._chidanTrazha(z, mabda); +if (montazer) this._tazehBaTakhir(KASHI_MOHLAT_NIYA + 20); +else if (shekasteh) this._tazehBaTakhir(KASHI_AZMOON_DOBAREH + 50); +if (this._bikar) { clearTimeout(this._bikar); this._bikar = null; } +if (hameAmadeh && g.pishVakeshiBikar !== false) { +this._bikar = setTimeout(function () { khod._bikar = null; khod._pishVakeshiBikar(); }, BIKAR_MOHLAT); +} +}; +LayeKashi.prototype._tazehBaTakhir = function (ms) { +var khod = this, zaman = zamanAknoon() + ms; +if (this._tzZamansanj) { +if (this._tzZaman <= zaman) return; +clearTimeout(this._tzZamansanj); +} +this._tzZaman = zaman; +this._tzZamansanj = setTimeout(function () { khod._tzZamansanj = null; khod.tazeh(); }, ms); +}; +LayeKashi.prototype._rezervMostatil = function (zk, b, mohlat, mx, my, olaviat) { +var enghesa = zamanAknoon() + mohlat; +this._traz(zk, mx, my); +for (var tx = b.x0; tx <= b.x1; tx++) { +for (var ty = b.y0; ty <= b.y1; ty++) { +if (ty < 0 || ty >= b.tedad) continue; +var rec = this._sakhtKashi(zk, tx, ty, olaviat); +this._rezerv[rec.kelid] = enghesa; +} +} +}; +LayeKashi.prototype.pishBar = function (zHadaf, markazMokan) { +var n = this._naghshe; +if (!n || !this._daman) return; +zHadaf = Math.round(zHadaf); +if (zHadaf < this.g.kamZoom || zHadaf > this.g.ziadZoom) return; +var zk = this._trazKashi(zHadaf), f = Math.pow(2, zk - zHadaf); +var c = tasvir(markazMokan.arz, markazMokan.tool, zHadaf); +var mx = (c.x - n._pahna / 2) * f, my = (c.y - n._boland / 2) * f; +this._rezervMostatil(zk, bazehKashi(mx, my, n._pahna * f, n._boland * f, zk, 0), PISH_BAR_MOHLAT, mx, my, 500); +var ch = this._trazChideman(); +this._chidanTrazha(ch.z, ch.mabda); +this._pishSaf(); +}; +LayeKashi.prototype._pishVakeshiHalgheh = function (z, mabda, pahna, boland, amghAfghi, amghAmoodi) { +if (!this._naghshe || !this._daman) return; +if (z < this.g.kamZoom || z > this.g.ziadZoom) return; +var zk = this._trazKashi(z), f = Math.pow(2, zk - z); +var mx = mabda.x * f, my = mabda.y * f; +var b = bazehKashi(mx, my, pahna * f, boland * f, zk, 1); +if (amghAfghi) { +this._rezervMostatil(zk, { +x0: amghAfghi > 0 ? b.x1 + 1 : b.x0 - Math.abs(amghAfghi), x1: amghAfghi > 0 ? b.x1 + amghAfghi : b.x0 - 1, +y0: b.y0, y1: b.y1, tedad: b.tedad +}, PISH_VAKESHI_MOHLAT, mx, my, 800); +} +if (amghAmoodi) { +this._rezervMostatil(zk, { +x0: b.x0, x1: b.x1, tedad: b.tedad, +y0: amghAmoodi > 0 ? b.y1 + 1 : b.y0 - Math.abs(amghAmoodi), y1: amghAmoodi > 0 ? b.y1 + amghAmoodi : b.y0 - 1 +}, PISH_VAKESHI_MOHLAT, mx, my, 800); +} +this._pishSaf(); +}; +LayeKashi.prototype._pishVakeshiBikar = function () { +var n = this._naghshe; +if (!n || !this._daman || shabakehKond() > 1) return; +var ch = this._trazChideman(), boomi = this._bazehBoomi(), khod = this; +var zk = this._trazKashi(ch.z), fehrest = [], f, b, tx, ty; +if (zk - 1 >= boomi.kam) { +f = Math.pow(2, zk - 1 - ch.z); +b = bazehKashi(ch.mabda.x * f, ch.mabda.y * f, n._pahna * f, n._boland * f, zk - 1, 0); +for (tx = b.x0; tx <= b.x1; tx++) for (ty = b.y0; ty <= b.y1; ty++) fehrest.push([zk - 1, tx, ty]); +} +for (var up = 2; up <= 8 && zk - up >= boomi.kam; up++) { +f = Math.pow(2, zk - up - ch.z); +b = bazehKashi(ch.mabda.x * f, ch.mabda.y * f, n._pahna * f, n._boland * f, zk - up, 0); +for (tx = b.x0; tx <= b.x1; tx++) for (ty = b.y0; ty <= b.y1; ty++) fehrest.push([zk - up, tx, ty]); +} +if (zk + 1 <= boomi.ziad && !shabakehKond()) { +f = Math.pow(2, zk + 1 - ch.z); +var mx = (ch.mabda.x + n._pahna / 2) * f / ANDAZE_KASHI, my = (ch.mabda.y + n._boland / 2) * f / ANDAZE_KASHI; +for (tx = Math.floor(mx - 1); tx <= Math.floor(mx); tx++) for (ty = Math.floor(my - 1); ty <= Math.floor(my); ty++) fehrest.push([zk + 1, tx, ty]); +} +var shomar = 0; +for (var i = 0; i < fehrest.length && shomar < 40; i++) { +var k = fehrest[i], tedad = Math.pow(2, k[0]); +if (k[2] < 0 || k[2] >= tedad || this._kashiha[kelidKashi(k[0], k[1], k[2])]) continue; +var neshani = this._neshaniKashi(k[0], pichesh(k[1], tedad), k[2]); +if (kashKashiNegah(neshani) || this._bikarDarRah[neshani]) continue; +shomar++; +(function (neshani) { +var im = new Image(); +im.decoding = 'async'; +khod._bikarDarRah[neshani] = im; +im.onload = function () { +delete khod._bikarDarRah[neshani]; +if (im.naturalWidth > 0) { im.className = 'mz-kashi'; kashKashiSet(neshani, im); khod._amar.pishVakeshi++; } +}; +im.onerror = function () { delete khod._bikarDarRah[neshani]; }; +im.src = neshani; +})(neshani); +} +}; +LayeKashi.prototype.amar = function () { +var a = this._amar, dom = 0, amadeh = 0; +for (var k in this._kashiha) { dom++; if (this._kashiha[k].vaz === 2) amadeh++; } +return { +darkhast: a.darkhast, residan: a.residan, khata: a.khata, talashDobareh: a.talashDobareh, +laghv: a.laghv, laghvSaf: a.laghvSaf, azKash: a.azKash, niya: a.niya, poshtiban: a.poshtiban, pishVakeshi: a.pishVakeshi, +darRah: this._darRah, saf: this._saf.length, dom: dom, amadeh: amadeh, kash: kashKashiAndazeh() +}; +}; +LayeKashi.prototype.tanzimShefafiat = function (v) { +this.g.shefafiat = v; +if (this._daman) this._daman.style.opacity = v; +return this; +}; +LayeKashi.prototype.tanzimNeshani = function (u) { +this._nesahni = u; +if (this._daman) { this._pakHame(); this._mabdaGhabli = null; this.tazeh(); } +return this; +}; +var NIM_DOR3857 = 20037508.342789244; +function LayeKashiWMS(nesahni, gozineh) { +LayeKashi.call(this, nesahni, gozineh); +this.g = darham({ +layeha: '', shive: '', gooneh: 'image/png', shafaf: true, +naskheh: '1.3.0', srs: 'EPSG:3857', kamZoom: 0, ziadZoom: 19, +shefafiat: 1, etebar: '', kelasKashi: '' +}, gozineh); +} +LayeKashiWMS.prototype = Object.create(LayeKashi.prototype); +LayeKashiWMS.prototype.constructor = LayeKashiWMS; +LayeKashiWMS.prototype._neshaniKashi = function (z, x, y) { +var tedad = Math.pow(2, z); +var andaz = 2 * NIM_DOR3857 / tedad; +var minX = -NIM_DOR3857 + x * andaz; +var maxX = minX + andaz; +var maxY = NIM_DOR3857 - y * andaz; +var minY = maxY - andaz; +var g = this.g; +var yekmimSeh = g.naskheh === '1.3.0'; +var bbox = minX + ',' + minY + ',' + maxX + ',' + maxY; +var josh = this._nesahni.indexOf('?') === -1 ? '?' : '&'; +var p = 'SERVICE=WMS&REQUEST=GetMap&VERSION=' + g.naskheh + +'&LAYERS=' + encodeURIComponent(g.layeha) + +'&STYLES=' + encodeURIComponent(g.shive) + +'&FORMAT=' + encodeURIComponent(g.gooneh) + +'&TRANSPARENT=' + (g.shafaf ? 'TRUE' : 'FALSE') + +(yekmimSeh ? '&CRS=' : '&SRS=') + encodeURIComponent(g.srs) + +'&WIDTH=' + ANDAZE_KASHI + '&HEIGHT=' + ANDAZE_KASHI + +'&BBOX=' + bbox; +return this._nesahni + josh + p; +}; +function PushteshTasvir(neshani, karan, gozineh) { +Laye.call(this); +this._neshani = neshani; +this._karan = karan instanceof Karan ? karan : new Karan(karan[0], karan[1]); +this.g = darham({ shefafiat: 1, kelas: '', tabeshgar: false }, gozineh); +} +PushteshTasvir.prototype = Object.create(Laye.prototype); +PushteshTasvir.prototype.constructor = PushteshTasvir; +PushteshTasvir.prototype._benshan = function () { +var n = this._naghshe; +this._onsor = sakhtOnsor('img', 'mz-pushtesh-tasvir ' + this.g.kelas, n._damanKashi); +this._onsor.src = this._neshani; this._onsor.alt = ''; +this._onsor.style.opacity = this.g.shefafiat; +if (this.g.tabeshgar) this._onsor.style.imageRendering = 'pixelated'; +this.bekesh(); +}; +PushteshTasvir.prototype._bardar = function () { +if (this._onsor && this._onsor.parentNode) this._onsor.parentNode.removeChild(this._onsor); +}; +PushteshTasvir.prototype.bekesh = function () { +if (!this._naghshe || !this._onsor) return; +var jg = this._naghshe.mokanBePiksel(new Mokan(this._karan.jg.arz, this._karan.jg.tool)); +var ss = this._naghshe.mokanBePiksel(new Mokan(this._karan.ss.arz, this._karan.ss.tool)); +this._onsor.style.left = Math.min(jg.x, ss.x) + 'px'; +this._onsor.style.top = Math.min(jg.y, ss.y) + 'px'; +this._onsor.style.width = Math.abs(ss.x - jg.x) + 'px'; +this._onsor.style.height = Math.abs(jg.y - ss.y) + 'px'; +}; +PushteshTasvir.prototype.tanzimShefafiat = function (v) { +this.g.shefafiat = v; if (this._onsor) this._onsor.style.opacity = v; return this; +}; +PushteshTasvir.prototype.gereftanKaran = function () { return this._karan; }; +function NeshanTasvir(gozineh) { +this.g = darham({ +neshani: null, andazeh: [25, 41], langar: [12, 41], +langarPanjere: [1, -34], kelas: '' +}, gozineh); +} +NeshanTasvir.prototype.sakhtOnsor = function () { +var o; +if (this.g.neshani) { +o = document.createElement('img'); +o.src = this.g.neshani; +o.className = 'mz-neshan-tasvir ' + this.g.kelas; +o.style.width = this.g.andazeh[0] + 'px'; +o.style.height = this.g.andazeh[1] + 'px'; +o.style.marginLeft = (-this.g.langar[0]) + 'px'; +o.style.marginTop = (-this.g.langar[1]) + 'px'; +} else { +o = document.createElement('div'); +o.className = 'mz-sanjagh-jaa ' + this.g.kelas; +o.innerHTML = ''; +} +return o; +}; +function Neshan(mokan, gozineh) { +Laye.call(this); +this.mokan = Mokan.az(mokan); +this.g = darham({ +neshan: null, rang: '#0e8f86', keshidani: false, +titr: '', zIndex: 0 +}, gozineh); +} +Neshan.prototype = Object.create(Laye.prototype); +Neshan.prototype.constructor = Neshan; +Neshan.prototype._benshan = function () { +var n = this._naghshe, khod = this; +var neshan = this.g.neshan || new NeshanTasvir({}); +this._onsor = neshan.sakhtOnsor(); +this._onsor.classList.add('mz-neshan'); +this._onsor.style.setProperty('--mz-rang', this.g.rang); +if (this.g.titr) this._onsor.title = this.g.titr; +if (this.g.zIndex) this._onsor.style.zIndex = this.g.zIndex; +n._damanNeshan.appendChild(this._onsor); +this._onsor.addEventListener('click', function (e) { +e.stopPropagation(); +khod.partab('click', { mokan: khod.mokan }); +if (khod._panjere) khod.bazPanjere(); +}); +this._onsor.addEventListener('mouseenter', function () { +khod.partab('darun'); +if (khod._namak) khod._namak.nemayesh(); +}); +this._onsor.addEventListener('mouseleave', function () { +khod.partab('biroun'); +if (khod._namak) khod._namak.penhan(); +}); +if (this._namak && !this._namak._onsor) { +this._namak.bazBar(n, this.mokan); +this._namak.penhan(); +} +if (this.g.keshidani) this._bastanKeshesh(); +this.jaGozari(); +}; +Neshan.prototype._bardar = function () { +if (this._onsor && this._onsor.parentNode) this._onsor.parentNode.removeChild(this._onsor); +if (this._panjere) this._panjere.hazf(); +if (this._namak) this._namak.hazf(); +}; +Neshan.prototype.jaGozari = function () { +if (!this._naghshe || !this._onsor) return; +var p = this._naghshe.mokanBePiksel(this.mokan); +this._onsor.style.left = p.x + 'px'; +this._onsor.style.top = p.y + 'px'; +}; +Neshan.prototype.tanzimMokan = function (mokan) { +this.mokan = Mokan.az(mokan); +this.jaGozari(); +if (this._panjere) this._panjere.tanzimMokan(this.mokan); +if (this._namak) this._namak.tanzimMokan(this.mokan); +this.partab('jabejaii', { mokan: this.mokan }); +return this; +}; +Neshan.prototype.gereftanMokan = function () { return this.mokan; }; +Neshan.prototype.bastanPanjere = function (mohtava, gozineh) { +this._panjere = mohtava instanceof Panjere +? mohtava : new Panjere(darham({ mohtava: mohtava }, gozineh)); +this._panjere.mokan = this.mokan; +return this; +}; +Neshan.prototype.bazPanjere = function () { +if (this._panjere && this._naghshe) this._panjere.bazBar(this._naghshe, this.mokan); +return this; +}; +Neshan.prototype.bastanNamak = function (mohtava, gozineh) { +this._namak = mohtava instanceof Namak +? mohtava : new Namak(darham({ mohtava: mohtava }, gozineh)); +this._namak.mokan = this.mokan; +if (this._naghshe) { this._namak.bazBar(this._naghshe, this.mokan); this._namak.penhan(); } +return this; +}; +Neshan.prototype._bastanKeshesh = function () { +var khod = this, darKeshesh = false, pointerId = null; +this._onsor.classList.add('mz-neshan-keshidani'); +var payanKeshesh = function () { +if (!darKeshesh) return; +darKeshesh = false; khod._naghshe._ghofl = false; +if (pointerId != null && khod._onsor.releasePointerCapture) { +try { khod._onsor.releasePointerCapture(pointerId); } catch (err) {} +} +pointerId = null; +khod.partab('keshesh-payan', { mokan: khod.mokan }); +}; +var paain = function (e) { +darKeshesh = true; e.stopPropagation(); +khod._naghshe._ghofl = true; +if (e.pointerId != null && khod._onsor.setPointerCapture) { +pointerId = e.pointerId; +try { khod._onsor.setPointerCapture(pointerId); } catch (err) {} +} +khod.partab('keshesh-aghaz'); +}; +var harekat = function (e) { +if (!darKeshesh) return; +var noghte = khod._naghshe._noghteRoydad(e); +var mabda = khod._naghshe._mabda(); +khod.tanzimMokan(vaTasvir(mabda.x + noghte.x, mabda.y + noghte.y, Math.round(khod._naghshe._bozorgnamai))); +}; +if (window.PointerEvent) { +this._onsor.addEventListener('pointerdown', paain); +this._onsor.addEventListener('pointermove', harekat); +this._onsor.addEventListener('pointerup', payanKeshesh); +this._onsor.addEventListener('pointercancel', payanKeshesh); +} else { +this._onsor.addEventListener('mousedown', paain); +window.addEventListener('mousemove', harekat); +window.addEventListener('mouseup', payanKeshesh); +} +window.addEventListener('blur', payanKeshesh); +}; +function Panjere(gozineh) { +Laye.call(this); +this.g = darham({ +mohtava: '', bastaniPazir: true, bishineTool: 240, +afsat: [0, 26], kelas: '' +}, gozineh); +} +Panjere.prototype = Object.create(Laye.prototype); +Panjere.prototype.constructor = Panjere; +Panjere.prototype.bazBar = function (naghshe, mokan) { +this._naghshe = naghshe; +this.mokan = Mokan.az(mokan) || this.mokan; +if (naghshe._panjereBaz) naghshe._panjereBaz.hazf(); +naghshe._panjereBaz = this; +this._onsor = sakhtOnsor('div', 'mz-panjere ' + this.g.kelas, naghshe._damanRoo); +this._onsor.style.maxWidth = this.g.bishineTool + 'px'; +var badaneh = sakhtOnsor('div', 'mz-panjere-badaneh', this._onsor); +if (typeof this.g.mohtava === 'string') badaneh.innerHTML = this.g.mohtava; +else badaneh.appendChild(this.g.mohtava); +sakhtOnsor('div', 'mz-panjere-nok', this._onsor); +if (this.g.bastaniPazir) { +var khod = this; +var bastan = sakhtOnsor('button', 'mz-panjere-bastan', this._onsor); +bastan.type = 'button'; bastan.innerHTML = '×'; +bastan.addEventListener('click', function (e) { e.stopPropagation(); khod.hazf(); }); +} +this.jaGozari(); +this.partab('baz'); +return this; +}; +Panjere.prototype.jaGozari = function () { +if (!this._naghshe || !this._onsor) return; +var p = this._naghshe.mokanBePiksel(this.mokan); +this._onsor.style.left = p.x + 'px'; +this._onsor.style.top = (p.y - this.g.afsat[1]) + 'px'; +}; +Panjere.prototype.tanzimMokan = function (m) { this.mokan = Mokan.az(m); this.jaGozari(); return this; }; +Panjere.prototype.tanzimMohtava = function (v) { +this.g.mohtava = v; +if (this._onsor) { +var b = this._onsor.querySelector('.mz-panjere-badaneh'); +if (typeof v === 'string') b.innerHTML = v; else { b.innerHTML = ''; b.appendChild(v); } +} +return this; +}; +Panjere.prototype.hazf = function () { +if (this._onsor && this._onsor.parentNode) this._onsor.parentNode.removeChild(this._onsor); +if (this._naghshe && this._naghshe._panjereBaz === this) this._naghshe._panjereBaz = null; +this.partab('bastan'); +return this; +}; +function Namak(gozineh) { +Laye.call(this); +this.g = darham({ mohtava: '', jibegah: 'bala', afsat: [0, 12], kelas: '' }, gozineh); +} +Namak.prototype = Object.create(Laye.prototype); +Namak.prototype.constructor = Namak; +Namak.prototype.bazBar = function (naghshe, mokan) { +this._naghshe = naghshe; +this.mokan = Mokan.az(mokan) || this.mokan; +this._onsor = sakhtOnsor('div', 'mz-namak mz-namak-' + this.g.jibegah + ' ' + this.g.kelas, naghshe._damanRoo); +if (typeof this.g.mohtava === 'string') this._onsor.innerHTML = this.g.mohtava; +else this._onsor.appendChild(this.g.mohtava); +this.jaGozari(); +return this; +}; +Namak.prototype.jaGozari = function () { +if (!this._naghshe || !this._onsor) return; +var p = this._naghshe.mokanBePiksel(this.mokan); +this._onsor.style.left = p.x + 'px'; +this._onsor.style.top = (p.y - this.g.afsat[1]) + 'px'; +}; +Namak.prototype.tanzimMokan = function (m) { this.mokan = Mokan.az(m); this.jaGozari(); return this; }; +Namak.prototype.nemayesh = function () { if (this._onsor) this._onsor.style.display = 'block'; return this; }; +Namak.prototype.penhan = function () { if (this._onsor) this._onsor.style.display = 'none'; return this; }; +Namak.prototype.hazf = function () { +if (this._onsor && this._onsor.parentNode) this._onsor.parentNode.removeChild(this._onsor); +return this; +}; +function LayeBardari(gozineh) { +Laye.call(this); +this.g = darham({ +rang: '#0e8f86', pahna: 3, shefafiatKhat: 1, +porkon: false, rangPorkon: '#0e8f86', shefafiatPorkon: 0.2, +khatChin: null +}, gozineh); +} +LayeBardari.prototype = Object.create(Laye.prototype); +LayeBardari.prototype.constructor = LayeBardari; +LayeBardari.prototype._benshan = function () { +var n = this._naghshe, khod = this; +this._shekl = document.createElementNS((function(){var d=document.createElement('div');d.innerHTML='';return d.firstChild.namespaceURI;})(), this._barchasbSvg()); +this._pardazandehSabk(); +n._boomSvg.appendChild(this._shekl); +this._shekl.addEventListener('click', function (e) { +e.stopPropagation(); +khod.partab('click'); +if (khod._panjere) khod._panjere.bazBar(n, khod._mokanMarkaz()); +}); +this.bekesh(); +}; +LayeBardari.prototype._bardar = function () { +if (this._shekl && this._shekl.parentNode) this._shekl.parentNode.removeChild(this._shekl); +}; +LayeBardari.prototype._pardazandehSabk = function () { +var s = this._shekl, g = this.g; +s.setAttribute('stroke', g.rang); +s.setAttribute('stroke-width', g.pahna); +s.setAttribute('stroke-opacity', g.shefafiatKhat); +s.setAttribute('stroke-linejoin', 'round'); +s.setAttribute('stroke-linecap', 'round'); +if (g.khatChin) s.setAttribute('stroke-dasharray', g.khatChin); +if (g.porkon) { +s.setAttribute('fill', g.rangPorkon); +s.setAttribute('fill-opacity', g.shefafiatPorkon); +} else s.setAttribute('fill', 'none'); +s.setAttribute('class', 'mz-bardari'); +}; +LayeBardari.prototype.bastanPanjere = function (mohtava, gozineh) { +this._panjere = new Panjere(darham({ mohtava: mohtava }, gozineh)); +return this; +}; +LayeBardari.prototype.tanzimSabk = function (gozineh) { +this.g = darham(this.g, gozineh); +if (this._shekl) this._pardazandehSabk(); +return this; +}; +function KhatShekaste(mokanha, gozineh) { +LayeBardari.call(this, gozineh); +this._noghat = this._parseh(mokanha); +} +KhatShekaste.prototype = Object.create(LayeBardari.prototype); +KhatShekaste.prototype.constructor = KhatShekaste; +KhatShekaste.prototype._parseh = function (arr) { +var out = []; for (var i = 0; i < arr.length; i++) out.push(Mokan.az(arr[i])); return out; +}; +KhatShekaste.prototype._barchasbSvg = function () { return 'polyline'; }; +KhatShekaste.prototype._mokanMarkaz = function () { return this._noghat[Math.floor(this._noghat.length / 2)]; }; +KhatShekaste.prototype.bekesh = function () { +if (!this._naghshe || !this._shekl) return; +var n = this._naghshe, noghat = []; +for (var i = 0; i < this._noghat.length; i++) { +var p = n.mokanBePiksel(this._noghat[i]); +noghat.push(p.x + ',' + p.y); +} +this._shekl.setAttribute('points', noghat.join(' ')); +}; +KhatShekaste.prototype.gereftanKaran = function () { return Karan.az(this._noghat); }; +function ChandZeli(mokanha, gozineh) { +KhatShekaste.call(this, mokanha, darham({ porkon: true }, gozineh)); +} +ChandZeli.prototype = Object.create(KhatShekaste.prototype); +ChandZeli.prototype.constructor = ChandZeli; +ChandZeli.prototype._barchasbSvg = function () { return 'polygon'; }; +function Dayereh(markaz, gozineh) { +LayeBardari.call(this, darham({ porkon: true }, gozineh)); +this._markaz = Mokan.az(markaz); +this._shoa = (gozineh && gozineh.shoa) || 200; +} +Dayereh.prototype = Object.create(LayeBardari.prototype); +Dayereh.prototype.constructor = Dayereh; +Dayereh.prototype._barchasbSvg = function () { return 'circle'; }; +Dayereh.prototype._mokanMarkaz = function () { return this._markaz; }; +Dayereh.prototype.bekesh = function () { +if (!this._naghshe || !this._shekl) return; +var n = this._naghshe; +var p = n.mokanBePiksel(this._markaz); +var deltaTool = this._shoa / (111320 * Math.cos(this._markaz.arz * RADIAN)); +var pKomak = n.mokanBePiksel(new Mokan(this._markaz.arz, this._markaz.tool + deltaTool)); +this._shekl.setAttribute('cx', p.x); +this._shekl.setAttribute('cy', p.y); +this._shekl.setAttribute('r', Math.abs(pKomak.x - p.x)); +}; +Dayereh.prototype.tanzimShoa = function (m) { this._shoa = m; this.bekesh(); return this; }; +function NeshanDayereh(markaz, gozineh) { +LayeBardari.call(this, darham({ porkon: true }, gozineh)); +this._markaz = Mokan.az(markaz); +this._shoaPiksel = (gozineh && gozineh.shoa) || 10; +} +NeshanDayereh.prototype = Object.create(LayeBardari.prototype); +NeshanDayereh.prototype.constructor = NeshanDayereh; +NeshanDayereh.prototype._barchasbSvg = function () { return 'circle'; }; +NeshanDayereh.prototype._mokanMarkaz = function () { return this._markaz; }; +NeshanDayereh.prototype.bekesh = function () { +if (!this._naghshe || !this._shekl) return; +var p = this._naghshe.mokanBePiksel(this._markaz); +this._shekl.setAttribute('cx', p.x); +this._shekl.setAttribute('cy', p.y); +this._shekl.setAttribute('r', this._shoaPiksel); +}; +NeshanDayereh.prototype.tanzimMokan = function (m) { this._markaz = Mokan.az(m); this.bekesh(); return this; }; +NeshanDayereh.prototype.tanzimShoa = function (p) { this._shoaPiksel = p; this.bekesh(); return this; }; +NeshanDayereh.prototype.gereftanKaran = function () { return new Karan(this._markaz.baArayeh(), this._markaz.baArayeh()); }; +function Mostatil(karan, gozineh) { +var k = karan instanceof Karan ? karan : new Karan(karan[0], karan[1]); +var goosheha = [ +[k.jg.arz, k.jg.tool], [k.jg.arz, k.ss.tool], +[k.ss.arz, k.ss.tool], [k.ss.arz, k.jg.tool] +]; +ChandZeli.call(this, goosheha, gozineh); +} +Mostatil.prototype = Object.create(ChandZeli.prototype); +Mostatil.prototype.constructor = Mostatil; +function GoroohLaye(layeha) { +Laye.call(this); +this._azaa = []; +if (layeha) for (var i = 0; i < layeha.length; i++) this.afzoodan(layeha[i]); +} +GoroohLaye.prototype = Object.create(Laye.prototype); +GoroohLaye.prototype.constructor = GoroohLaye; +GoroohLaye.prototype.afzoodan = function (laye) { +this._azaa.push(laye); +if (this._naghshe) laye.afzoodanBe(this._naghshe); +return this; +}; +GoroohLaye.prototype.hazfOzv = function (laye) { +var i = this._azaa.indexOf(laye); +if (i > -1) { this._azaa.splice(i, 1); laye.hazf(); } +return this; +}; +GoroohLaye.prototype._benshan = function () { +for (var i = 0; i < this._azaa.length; i++) this._azaa[i].afzoodanBe(this._naghshe); +}; +GoroohLaye.prototype._bardar = function () { +for (var i = 0; i < this._azaa.length; i++) this._azaa[i].hazf(); +}; +GoroohLaye.prototype.paksazi = function () { +while (this._azaa.length) this.hazfOzv(this._azaa[0]); +return this; +}; +GoroohLaye.prototype.pimayesh = function (kar) { +for (var i = 0; i < this._azaa.length; i++) kar(this._azaa[i], i); +return this; +}; +function GoroohArezeh(layeha) { GoroohLaye.call(this, layeha); } +GoroohArezeh.prototype = Object.create(GoroohLaye.prototype); +GoroohArezeh.prototype.constructor = GoroohArezeh; +GoroohArezeh.prototype.gereftanKaran = function () { +var noghat = []; +for (var i = 0; i < this._azaa.length; i++) { +var l = this._azaa[i]; +if (l.mokan) noghat.push(l.mokan); +else if (l.gereftanKaran) { var k = l.gereftanKaran(); noghat.push(k.jg, k.ss); } +} +return Karan.az(noghat); +}; +function LayeGeoJSON(dadeh, gozineh) { +GoroohArezeh.call(this); +this.g = gozineh || {}; +if (dadeh) this.afzoodanDadeh(dadeh); +} +LayeGeoJSON.prototype = Object.create(GoroohArezeh.prototype); +LayeGeoJSON.prototype.constructor = LayeGeoJSON; +LayeGeoJSON.prototype._m = function (c) { return [c[1], c[0]]; }; +LayeGeoJSON.prototype.afzoodanDadeh = function (dadeh) { +if (dadeh.type === 'FeatureCollection') { +for (var i = 0; i < dadeh.features.length; i++) this.afzoodanArezeh(dadeh.features[i]); +} else if (dadeh.type === 'Feature') { +this.afzoodanArezeh(dadeh); +} else { +this.afzoodanArezeh({ type: 'Feature', geometry: dadeh, properties: {} }); +} +return this; +}; +LayeGeoJSON.prototype.afzoodanArezeh = function (arezeh) { +var hen = arezeh.geometry, khod = this, laye = null; +if (!hen) return this; +var c = hen.coordinates; +var sabk = typeof this.g.sabkArezeh === 'function' +? darham(this.g.sabk || {}, this.g.sabkArezeh(arezeh)) : (this.g.sabk || {}); +function nokhteLaye(mokan) { +if (typeof khod.g.noghteBeLaye === 'function') return khod.g.noghteBeLaye(arezeh, Mokan.az(mokan)); +return new Neshan(mokan, khod.g.gozineNeshan || {}); +} +switch (hen.type) { +case 'Point': +laye = nokhteLaye(this._m(c)); +break; +case 'MultiPoint': +for (var mp = 0; mp < c.length; mp++) this._sabtOzv(nokhteLaye(this._m(c[mp])), arezeh); +return this; +case 'LineString': +laye = new KhatShekaste(c.map(function (p) { return khod._m(p); }), sabk); +break; +case 'MultiLineString': +for (var ml = 0; ml < c.length; ml++) +this._sabtOzv(new KhatShekaste(c[ml].map(function (p) { return khod._m(p); }), sabk), arezeh); +return this; +case 'Polygon': +laye = new ChandZeli(c[0].map(function (p) { return khod._m(p); }), sabk); +break; +case 'MultiPolygon': +for (var i = 0; i < c.length; i++) +this._sabtOzv(new ChandZeli(c[i][0].map(function (p) { return khod._m(p); }), sabk), arezeh); +return this; +} +if (laye) this._sabtOzv(laye, arezeh); +return this; +}; +LayeGeoJSON.prototype._sabtOzv = function (laye, arezeh) { +if (this.g.harArezeh) this.g.harArezeh(arezeh, laye); +laye._arezeh = arezeh; +this.afzoodan(laye); +return laye; +}; +function Abzar(gozineh) { this.g = gozineh || {}; this.jibegah = this.g.jibegah || 'balaChap'; } +Abzar.prototype.afzoodanBe = function (naghshe) { +this._naghshe = naghshe; +this._onsor = this.saakht(naghshe); +naghshe._gooshehAbzar(this.jibegah).appendChild(this._onsor); +return this; +}; +Abzar.prototype.hazf = function () { +if (this._onsor && this._onsor.parentNode) this._onsor.parentNode.removeChild(this._onsor); +return this; +}; +function AbzarBozorgnamai(gozineh) { +Abzar.call(this, darham({ +jibegah: 'balaChap', +neshanBish: '+', neshanKam: '−', +rahnamaBish: 'بزرگ‌نمایی', rahnamaKam: 'کوچک‌نمایی' +}, gozineh)); +} +AbzarBozorgnamai.prototype = Object.create(Abzar.prototype); +AbzarBozorgnamai.prototype.saakht = function (naghshe) { +var g = this.g; +var jaa = sakhtOnsor('div', 'mz-abzar mz-abzar-zoom'); +var dokme = function (barchasb, kar, rahnama) { +var b = sakhtOnsor('button', 'mz-dokme', jaa); +b.type = 'button'; b.innerHTML = barchasb; b.setAttribute('aria-label', rahnama); b.title = rahnama; +b.addEventListener('click', function (e) { e.preventDefault(); kar(); }); +return b; +}; +dokme(g.neshanBish, function () { naghshe.bozorgnamaiBish(); }, g.rahnamaBish); +dokme(g.neshanKam, function () { naghshe.bozorgnamaiKam(); }, g.rahnamaKam); +return jaa; +}; +function AbzarEtebar(gozineh) { +Abzar.call(this, darham({ jibegah: 'paainRast' }, gozineh)); +this._fehrest = []; +} +AbzarEtebar.prototype = Object.create(Abzar.prototype); +AbzarEtebar.prototype.saakht = function (naghshe) { +this._jaa = sakhtOnsor('div', 'mz-abzar mz-abzar-etebar'); +if (this.g.matn) this._fehrest.push(this.g.matn); +this._baznevisi(); +return this._jaa; +}; +AbzarEtebar.prototype.afzoodan = function (matn) { +if (matn && this._fehrest.indexOf(matn) === -1) { this._fehrest.push(matn); this._baznevisi(); } +return this; +}; +AbzarEtebar.prototype._baznevisi = function () { +if (!this._jaa) return; +var barand = +'' + PARCHAM_FELESTIN + +'© ' + +'منظر / Manzar' + +''; +var dadeh = this._fehrest.length ? '' + this._fehrest.join(' · ') + ' ' : ''; +this._jaa.innerHTML = dadeh + barand; +}; +function AbzarMeghyas(gozineh) { Abzar.call(this, darham({ jibegah: 'paainChap', bishinePahna: 100 }, gozineh)); } +AbzarMeghyas.prototype = Object.create(Abzar.prototype); +AbzarMeghyas.prototype.saakht = function (naghshe) { +this._jaa = sakhtOnsor('div', 'mz-abzar mz-abzar-meghyas'); +this._mile = sakhtOnsor('div', 'mz-meghyas-mile', this._jaa); +var khod = this; +naghshe.on('harekat zoom', function () { khod.baznevisi(); }); +naghshe.on('load', function () { khod.baznevisi(); }); +setTimeout(function () { khod.baznevisi(); }, 0); +return this._jaa; +}; +AbzarMeghyas.prototype.baznevisi = function () { +var n = this._naghshe; if (!n || !n._pahna) return; +var markaz = n.gereftanMarkaz(); +var m1 = new Mokan(markaz[0], markaz[1] - 0.05), m2 = new Mokan(markaz[0], markaz[1] + 0.05); +var p1 = n.mokanBePiksel(m1), p2 = n.mokanBePiksel(m2); +var metrHarPiksel = m1.faseleh(m2) / Math.abs(p2.x - p1.x); +var hadaf = this.g.bishinePahna * metrHarPiksel; +var rond = this._rondZibaa(hadaf); +var pahna = rond / metrHarPiksel; +this._mile.style.width = pahna + 'px'; +this._mile.textContent = rond >= 1000 ? (rond / 1000) + ' کیلومتر' : rond + ' متر'; +}; +AbzarMeghyas.prototype._rondZibaa = function (m) { +var toan = Math.pow(10, Math.floor(Math.log(m) / Math.LN10)); +var d = m / toan; +d = d >= 5 ? 5 : (d >= 3 ? 3 : (d >= 2 ? 2 : 1)); +return d * toan; +}; +function AbzarLayeGozin(payeHa, roiHa, gozineh) { +Abzar.call(this, darham({ jibegah: 'balaRast' }, gozineh)); +this._payeHa = payeHa || {}; +this._roiHa = roiHa || {}; +} +AbzarLayeGozin.prototype = Object.create(Abzar.prototype); +AbzarLayeGozin.prototype.saakht = function (naghshe) { +var jaa = sakhtOnsor('div', 'mz-abzar mz-abzar-layeGozin'), khod = this; +var naam, aval = true; +for (naam in this._payeHa) { +(function (naam, laye, aval) { +var radif = sakhtOnsor('label', 'mz-layeGozin-radif', jaa); +var vorodi = sakhtOnsor('input', '', radif); +vorodi.type = 'radio'; vorodi.name = 'mz-payeh'; +if (aval) { vorodi.checked = true; laye.afzoodanBe(naghshe); } +vorodi.addEventListener('change', function () { +for (var n in khod._payeHa) if (khod._payeHa[n].roiNaghshe()) khod._payeHa[n].hazf(); +laye.afzoodanBe(naghshe); +}); +sakhtOnsor('span', '', radif).textContent = ' ' + naam; +})(naam, this._payeHa[naam], aval); +aval = false; +} +if (Object.keys(this._roiHa).length) sakhtOnsor('div', 'mz-layeGozin-marz', jaa); +for (naam in this._roiHa) { +(function (naam, laye) { +var radif = sakhtOnsor('label', 'mz-layeGozin-radif', jaa); +var vorodi = sakhtOnsor('input', '', radif); +vorodi.type = 'checkbox'; +vorodi.addEventListener('change', function () { +if (vorodi.checked) laye.afzoodanBe(naghshe); else laye.hazf(); +}); +sakhtOnsor('span', '', radif).textContent = ' ' + naam; +})(naam, this._roiHa[naam]); +} +return jaa; +}; +function AbzarLayeha(payeHa, roiHa, gozineh) { +Abzar.call(this, darham({ jibegah: 'balaRast', jamShodeh: true, shefafiat: true, sarbarg: 'لایه‌ها' }, gozineh)); +this._payeHa = payeHa || {}; +this._roiHa = roiHa || {}; +this._radifha = []; +} +AbzarLayeha.prototype = Object.create(Abzar.prototype); +AbzarLayeha.prototype.saakht = function (naghshe) { +var khod = this; +var jaa = sakhtOnsor('div', 'mz-abzar mz-abzar-layeha' + (this.g.jamShodeh ? ' mz-layeha-jam' : '')); +var neshanDokme = sakhtOnsor('button', 'mz-layeha-neshan', jaa); +neshanDokme.type = 'button'; +neshanDokme.setAttribute('aria-label', this.g.sarbarg); +neshanDokme.innerHTML = +''; +var tablo = sakhtOnsor('div', 'mz-layeha-tablo', jaa); +var baz = function () { jaa.classList.add('mz-layeha-baz'); }; +var basteh = function () { jaa.classList.remove('mz-layeha-baz'); }; +if (this.g.jamShodeh) { +jaa.addEventListener('mouseenter', baz); +jaa.addEventListener('mouseleave', basteh); +neshanDokme.addEventListener('click', function () { jaa.classList.toggle('mz-layeha-baz'); }); +} else { baz(); } +var goroohNaam = 'mz-payeh-' + Math.random().toString(36).slice(2, 8); +var aval = true, naam; +for (naam in this._payeHa) { +this._radif(tablo, naam, this._payeHa[naam], 'radio', goroohNaam, aval, naghshe); +aval = false; +} +if (Object.keys(this._roiHa).length) sakhtOnsor('div', 'mz-layeha-marz', tablo); +for (naam in this._roiHa) { +this._radif(tablo, naam, this._roiHa[naam], 'checkbox', null, false, naghshe); +} +return jaa; +}; +AbzarLayeha.prototype._radif = function (tablo, naam, laye, gooneh, gorooh, roshan, naghshe) { +var khod = this; +var radif = sakhtOnsor('div', 'mz-layeha-radif', tablo); +var barchasb = sakhtOnsor('label', 'mz-layeha-barchasb', radif); +var vorodi = sakhtOnsor('input', '', barchasb); +vorodi.type = gooneh; +if (gorooh) vorodi.name = gorooh; +var eslahShefafiat = function () { +if (laye.tanzimShefafiat && lang) laye.tanzimShefafiat(+lang.value); +}; +var faal = function () { +if (gooneh === 'radio') { +for (var n in khod._payeHa) if (khod._payeHa[n] !== laye && khod._payeHa[n].roiNaghshe()) khod._payeHa[n].hazf(); +laye.afzoodanBe(naghshe); +} else { +if (vorodi.checked) laye.afzoodanBe(naghshe); else laye.hazf(); +} +khod.partab && khod.partab('degargooni', { laye: laye, naam: naam }); +}; +if (roshan) { vorodi.checked = true; laye.afzoodanBe(naghshe); } +vorodi.addEventListener('change', faal); +sakhtOnsor('span', 'mz-layeha-naam', barchasb).textContent = naam; +var lang = null; +if (this.g.shefafiat && laye.tanzimShefafiat) { +lang = sakhtOnsor('input', 'mz-layeha-lang', radif); +lang.type = 'range'; lang.min = 0; lang.max = 1; lang.step = 0.05; +lang.value = (laye.g && laye.g.shefafiat != null) ? laye.g.shefafiat : 1; +lang.setAttribute('aria-label', 'شفافیتِ ' + naam); +lang.addEventListener('input', function () { if (laye.tanzimShefafiat) laye.tanzimShefafiat(+lang.value); }); +} +this._radifha.push({ naam: naam, laye: laye, vorodi: vorodi, lang: lang, gooneh: gooneh }); +}; +AbzarLayeha.prototype.afzoodanPaye = function (naam, laye) { this._payeHa[naam] = laye; return this; }; +AbzarLayeha.prototype.afzoodanRoo = function (naam, laye) { this._roiHa[naam] = laye; return this; }; +baRoydad(AbzarLayeha); +function Naghshe(gereh, gozineh) { +Nashani.call(this); +gozineh = gozineh || {}; +this._gereh = typeof gereh === 'string' ? document.getElementById(gereh) : gereh; +if (!this._gereh) throw new Error('منظر: عنصرِ نگه‌دارندهٔ نقشه یافت نشد.'); +var mk = Mokan.az(gozineh.markaz || [34.98, 50.95]) || new Mokan(34.98, 50.95); +this._markazMokan = mokanNormal(mk); +var bzAghaz = gozineh.bozorgnamai == null ? gozineh.zoom : gozineh.bozorgnamai; +this._bozorgnamai = bzAghaz == null ? 5 : bzAghaz; +this._kamZoom = gozineh.kamZoom == null ? 2 : gozineh.kamZoom; +this._ziadZoom = gozineh.ziadZoom == null ? 19 : gozineh.ziadZoom; +this._layeHa = []; +this._ghofl = false; +this._safheKelid = gozineh.safheKelid !== false; +this._sakhtSaz(); +this._chasbandanRoydad(); +if (gozineh.abzarZoom !== false) new AbzarBozorgnamai().afzoodanBe(this); +this._etebarAbzar = new AbzarEtebar({ matn: gozineh.etebar || '' }); +if (gozineh.abzarEtebar !== false) this._etebarAbzar.afzoodanBe(this); +if (gozineh.kashiPishfarz !== false) { +this.payeRasad = new LayeKashi(gozineh.kashi || KASHI_PISHFARZ, { +kamZoom: this._kamZoom, ziadZoom: this._ziadZoom, etebar: ETEBAR_DADEH, +ziadZoomBoomi: gozineh.ziadZoomBoomi == null ? null : gozineh.ziadZoomBoomi, +tizNama: !!gozineh.tizNama +}); +this.payeRasad.afzoodanBe(this); +} +this._jonoobBala = false; +if (gozineh.jonoobBala) this.tanzimJonoobBala(true); +if (gozineh.abzarMeghyas) new AbzarMeghyas().afzoodanBe(this); +var khod = this; +setTimeout(function () { khod.partab('load'); khod._tazehHame(); }, 0); +} +baRoydad(Naghshe); +Naghshe.prototype._sakhtSaz = function () { +var g = this._gereh; +g.classList.add('mz-naghshe'); +if (getComputedStyle(g).position === 'static') g.style.position = 'relative'; +this._damanKashi = sakhtOnsor('div', 'mz-daman mz-daman-kashiha', g); +this._boomSvg = document.createElementNS((function(){var d=document.createElement('div');d.innerHTML='';return d.firstChild.namespaceURI;})(), 'svg'); +this._boomSvg.setAttribute('class', 'mz-daman mz-boom'); +g.appendChild(this._boomSvg); +this._damanNeshan = sakhtOnsor('div', 'mz-daman mz-daman-neshanha', g); +this._damanRoo = sakhtOnsor('div', 'mz-daman mz-daman-roo', g); +this._goosheHa = {}; +var jaHa = ['balaChap', 'balaRast', 'paainChap', 'paainRast']; +for (var i = 0; i < jaHa.length; i++) +this._goosheHa[jaHa[i]] = sakhtOnsor('div', 'mz-goosheh mz-goosheh-' + jaHa[i], g); +this._andazeGiri(); +}; +Naghshe.prototype._gooshehAbzar = function (jibegah) { +return this._goosheHa[jibegah] || this._goosheHa.balaChap; +}; +Naghshe.prototype._andazeGiri = function () { +var r = this._gereh.getBoundingClientRect(); +this._pahna = r.width || this._gereh.clientWidth || 800; +this._boland = r.height || this._gereh.clientHeight || 500; +this._boomSvg.setAttribute('width', this._pahna); +this._boomSvg.setAttribute('height', this._boland); +}; +Naghshe.prototype._chasbandanRoydad = function () { +var khod = this, darKeshesh = false, akhar = null, jabejaShod = false, pointerId = null; +var vx = 0, vy = 0, zamanAkharHarekat = 0; +var darooneMatn = function (hadaf) { +for (var g = hadaf; g && g !== khod._gereh; g = g.parentNode) { +if (g.nodeType !== 1) continue; +var naam = g.tagName; +if (naam === 'INPUT' || naam === 'TEXTAREA' || naam === 'SELECT' || g.isContentEditable) return true; +if (g.classList && g.classList.contains('mz-panjere')) return true; +} +return false; +}; +var pakGozinesh = function () { +try { +var gz = window.getSelection && window.getSelection(); +if (gz && gz.rangeCount && !gz.isCollapsed) gz.removeAllRanges(); +} catch (err) {} +}; +var bazdar = function (e) { if (!darooneMatn(e.target) && e.cancelable) e.preventDefault(); }; +this._gereh.addEventListener('dragstart', bazdar); +this._gereh.addEventListener('selectstart', bazdar); +var payanKeshesh = function (rahaShodeBaSorat) { +khod._ghabEshareh = null; +if (!darKeshesh) return; +darKeshesh = false; +khod._gereh.classList.remove('mz-dast-basteh'); +if (pointerId != null && khod._gereh.releasePointerCapture) { +try { khod._gereh.releasePointerCapture(pointerId); } catch (err) {} +} +pointerId = null; +if (rahaShodeBaSorat && jabejaShod) khod._aghazLokhtiPikseli(vx * QAB_PAYEH, vy * QAB_PAYEH); +}; +var paain = function (e) { +if (khod._ghofl) return; +if (e.pointerType === 'touch') return; +if (e.button != null && e.button !== 0) return; +if (darooneMatn(e.target)) return; +pakGozinesh(); +khod._ghabEshareh = khod._gereh.getBoundingClientRect(); +khod._toghfeLokhtiPikseli(); +khod._toghfeZoomZendeh(); +darKeshesh = true; jabejaShod = false; +akhar = khod._noghteRoydad(e); +vx = vy = 0; zamanAkharHarekat = 0; +khod._gereh.classList.add('mz-dast-basteh'); +if (e.pointerId != null && khod._gereh.setPointerCapture) { +pointerId = e.pointerId; +try { khod._gereh.setPointerCapture(pointerId); } catch (err) {} +} +}; +var harekat = function (e) { +if (!darKeshesh) return; +var noghte = khod._noghteRoydad(e); +var dx = noghte.x - akhar.x, dy = noghte.y - akhar.y; +if (Math.abs(dx) + Math.abs(dy) > 2) jabejaShod = true; +akhar = noghte; +var zamanNoH = (e.timeStamp != null) ? e.timeStamp : Date.now(); +var dtH = zamanAkharHarekat ? mahdud(zamanNoH - zamanAkharHarekat, 2, 64) : QAB_PAYEH; +vx = vx * 0.7 + (dx / dtH) * 0.3; vy = vy * 0.7 + (dy / dtH) * 0.3; +zamanAkharHarekat = zamanNoH; +khod._jaijaPikseli(-dx, -dy); +if (e.cancelable) e.preventDefault(); +}; +var bala = function (e) { +if (darKeshesh && !jabejaShod) { +var noghte = khod._noghteRoydad(e), mabda = khod._mabda(); +var mokan = vaTasvir(mabda.x + noghte.x, mabda.y + noghte.y, khod._zTars()); +khod.partab('click', { mokan: mokan, noghte: noghte }); +} +var akoon = (e && e.timeStamp != null) ? e.timeStamp : Date.now(); +if (akoon - zamanAkharHarekat > 120) { vx = vy = 0; } +payanKeshesh(true); +}; +var payanBiLokhti = function () { payanKeshesh(false); }; +if (window.PointerEvent) { +this._gereh.addEventListener('pointerdown', paain); +this._gereh.addEventListener('pointermove', harekat); +this._gereh.addEventListener('pointerup', bala); +this._gereh.addEventListener('pointercancel', payanBiLokhti); +this._gereh.addEventListener('pointerleave', function (e) { +if (pointerId == null) payanBiLokhti(); +}); +this._gereh.addEventListener('lostpointercapture', function (e) { +if (darKeshesh && pointerId === e.pointerId) payanBiLokhti(); +}); +} else { +this._gereh.addEventListener('mousedown', paain); +window.addEventListener('mousemove', harekat); +window.addEventListener('mouseup', bala); +} +window.addEventListener('blur', payanBiLokhti); +document.addEventListener('visibilitychange', function () { +if (document.hidden) payanBiLokhti(); +}); +this._gereh.addEventListener('wheel', function (e) { +e.preventDefault(); +khod._zoomNarmCharkh(khod._dzCharkh(e), khod._noghteRoydad(e)); +}, { passive: false }); +this._gereh.addEventListener('dblclick', function (e) { +e.preventDefault(); khod._zoomNarmCharkh(1, khod._noghteRoydad(e)); +}); +window.addEventListener('resize', function () { khod._ghabEshareh = null; khod._andazeGiri(); khod._tazehHame(); }); +if (this._safheKelid) { +this._gereh.tabIndex = 0; +this._gereh.setAttribute('role', 'application'); +this._gereh.addEventListener('keydown', function (e) { +var gam = e.shiftKey ? 150 : 80, korde = true; +switch (e.key) { +case 'ArrowUp': khod._parvazPikseli(0, -gam); break; +case 'ArrowDown': khod._parvazPikseli(0, gam); break; +case 'ArrowLeft': khod._parvazPikseli(-gam, 0); break; +case 'ArrowRight': khod._parvazPikseli(gam, 0); break; +case '+': case '=': khod._zoomNarmCharkh(1, new Nogte(khod._pahna / 2, khod._boland / 2)); break; +case '-': case '_': khod._zoomNarmCharkh(-1, new Nogte(khod._pahna / 2, khod._boland / 2)); break; +default: korde = false; +} +if (korde) e.preventDefault(); +}); +} +this._chasbandanLams(); +}; +Naghshe.prototype._parvazPikseli = function (dx, dy) { this._jaijaPikseli(dx, dy); }; +Naghshe.prototype._aghazLokhtiPikseli = function (vx, vy) { +this._toghfeLokhtiPikseli(); +var khod = this; +if (Math.abs(vx) < 0.5 && Math.abs(vy) < 0.5) return; +var SAGHF = 90; +vx = mahdud(vx, -SAGHF, SAGHF); vy = mahdud(vy, -SAGHF, SAGHF); +var zamanGhabli = null; +function gam(zamanQab) { +if (zamanQab == null) zamanQab = zamanAknoon(); +var faseleZamani = (zamanGhabli == null) ? QAB_PAYEH : Math.min(zamanQab - zamanGhabli, 64); +zamanGhabli = zamanQab; +var zarib = faseleZamani / QAB_PAYEH; +khod._jaijaPikseli(-vx * zarib, -vy * zarib); +var mir = Math.pow(0.92, zarib); +vx *= mir; vy *= mir; +if (Math.abs(vx) > 0.4 || Math.abs(vy) > 0.4) khod._lokhtiRaf = requestAnimationFrame(gam); +else khod._lokhtiRaf = null; +} +khod._lokhtiRaf = requestAnimationFrame(gam); +}; +Naghshe.prototype._toghfeLokhtiPikseli = function () { +if (this._lokhtiRaf) { cancelAnimationFrame(this._lokhtiRaf); this._lokhtiRaf = null; } +}; +Naghshe.prototype._jabejaTrazCharkh = function (zNo) { +var z0 = this._zTars(); +if (zNo === z0) { this._bozorgnamai = z0; return; } +var n = this._charkhNoghte || new Nogte(this._pahna / 2, this._boland / 2), mabda = this._mabda(); +var joft = vaTasvir(mabda.x + n.x, mabda.y + n.y, z0); +this._bozorgnamai = zNo; +var np = tasvir(joft.arz, joft.tool, zNo); +this._markazMokan = mokanNormal(vaTasvir(np.x - n.x + this._pahna / 2, np.y - n.y + this._boland / 2, zNo)); +}; +Naghshe.prototype._toghfeZoomZendeh = function () { +var konoonZendeh = this._charkhKonoon; +this._charkhAnbashteh = 0; this._charkhPayeAnb = null; +this._charkhZaman = null; this._charkhKonoon = null; +if (this._charkhRaf) { +cancelAnimationFrame(this._charkhRaf); +this._charkhRaf = null; +this._jabejaTrazCharkh(mahdud(Math.round(konoonZendeh != null ? konoonZendeh : this._zTars()), this._kamZoom, this._ziadZoom)); +this._pakTarnsformZoom(); +this._tazehHame(); +this.partab('zoom', { zoom: this._zTars() }); +} +if (this._charkhPaye != null) { +this._bozorgnamai = this._zTars(); +this._charkhPaye = null; +this._pakTarnsformZoom(); +} +}; +Naghshe.prototype._chasbandanLams = function () { +var khod = this; +var HALAT_HICH = 0, HALAT_KESH = 1, HALAT_FESHOR = 2; +var halat = HALAT_HICH; +var akharNoghte = null; +var jabejaShod = false; +var faselehGhabli = 0; +var zPaayeh = 0; +var faselehAghaz = 0; +var zamanAkharLams = 0; +var noghteAkharLams = null; +var zamanAghazLams = 0; +var doAngoshtBood = false; +var vx = 0, vy = 0, zamanGham = 0; +function noghteAz(t) { return khod._noghteAzSafhe(t.clientX, t.clientY); } +function faseleh(a, b) { +var dx = a.clientX - b.clientX, dy = a.clientY - b.clientY; +return Math.sqrt(dx * dx + dy * dy); +} +function miyaneh(a, b) { return khod._noghteAzSafhe((a.clientX + b.clientX) / 2, (a.clientY + b.clientY) / 2); } +function toghfeLokhti() { khod._toghfeLokhtiPikseli(); } +function aghazLokhti() { khod._aghazLokhtiPikseli(vx * QAB_PAYEH, vy * QAB_PAYEH); } +khod._gereh.addEventListener('touchstart', function (e) { +if (khod._ghofl) return; +khod._ghabEshareh = khod._gereh.getBoundingClientRect(); +toghfeLokhti(); +khod._toghfeZoomZendeh(); +var lms = e.touches; +zamanAghazLams = Date.now(); +if (lms.length === 1) { +halat = HALAT_KESH; +akharNoghte = noghteAz(lms[0]); +jabejaShod = false; +vx = vy = 0; zamanGham = 0; +khod._gereh.classList.add('mz-dast-basteh'); +} else if (lms.length >= 2) { +halat = HALAT_FESHOR; +doAngoshtBood = true; +faselehGhabli = faselehAghaz = faseleh(lms[0], lms[1]); +zPaayeh = khod._bozorgnamai; +jabejaShod = false; +akharNoghte = miyaneh(lms[0], lms[1]); +} +}, { passive: true }); +khod._gereh.addEventListener('touchmove', function (e) { +if (khod._ghofl) return; +var lms = e.touches; +if (halat === HALAT_FESHOR && lms.length >= 2) { +if (e.cancelable) e.preventDefault(); +var f = faseleh(lms[0], lms[1]); +var mid = miyaneh(lms[0], lms[1]); +var zNo = zPaayeh + Math.log(f / faselehAghaz) / Math.LN2; +khod._zoomBeMarkaz(zNo, mid); +var dmx = mid.x - akharNoghte.x, dmy = mid.y - akharNoghte.y; +if (Math.abs(dmx) + Math.abs(dmy) > 0.5) khod._jaijaPikseli(-dmx, -dmy); +akharNoghte = mid; +faselehGhabli = f; +jabejaShod = true; +} else if (halat === HALAT_KESH && lms.length === 1) { +if (e.cancelable) e.preventDefault(); +var noghte = noghteAz(lms[0]); +var dx = noghte.x - akharNoghte.x, dy = noghte.y - akharNoghte.y; +if (Math.abs(dx) + Math.abs(dy) > 2) jabejaShod = true; +var zamanNoL = (e.timeStamp != null) ? e.timeStamp : Date.now(); +var dtL = zamanGham ? mahdud(zamanNoL - zamanGham, 2, 64) : QAB_PAYEH; +vx = vx * 0.7 + (dx / dtL) * 0.3; vy = vy * 0.7 + (dy / dtL) * 0.3; +zamanGham = zamanNoL; +akharNoghte = noghte; +khod._jaijaPikseli(-dx, -dy); +} +}, { passive: false }); +khod._gereh.addEventListener('touchend', function (e) { +if (!e.touches.length) khod._ghabEshareh = null; +if (khod._ghofl) return; +var mande = e.touches; +if (halat === HALAT_FESHOR) { +if (mande.length === 1) { +khod._zoomBeMarkaz(khod._zTars(), akharNoghte || new Nogte(khod._pahna / 2, khod._boland / 2)); +halat = HALAT_KESH; +akharNoghte = noghteAz(mande[0]); +jabejaShod = false; +vx = vy = 0; zamanGham = 0; +} else if (mande.length === 0) { +halat = HALAT_HICH; +var noghteMarkaz = new Nogte(khod._pahna / 2, khod._boland / 2); +khod._zoomBeMarkaz(khod._zTars(), noghteMarkaz); +if (doAngoshtBood && !jabejaShod && (Date.now() - zamanAghazLams) < 300) { +khod._zoomPiramoon(-1, noghteMarkaz); +} +doAngoshtBood = false; +khod._gereh.classList.remove('mz-dast-basteh'); +} +} else if (halat === HALAT_KESH && mande.length === 0) { +halat = HALAT_HICH; +khod._gereh.classList.remove('mz-dast-basteh'); +var noghtePayan = akharNoghte; +if (!jabejaShod) { +var aknoon = Date.now(); +if (noghtePayan && noghteAkharLams && +(aknoon - zamanAkharLams) < 300 && +Math.abs(noghtePayan.x - noghteAkharLams.x) < 30 && +Math.abs(noghtePayan.y - noghteAkharLams.y) < 30) { +khod._zoomPiramoon(1, noghtePayan); +zamanAkharLams = 0; noghteAkharLams = null; +} else { +zamanAkharLams = aknoon; noghteAkharLams = noghtePayan; +var mabda = khod._mabda(); +var mokan = vaTasvir(mabda.x + noghtePayan.x, mabda.y + noghtePayan.y, khod._zTars()); +khod.partab('click', { mokan: mokan, noghte: noghtePayan }); +} +} else { +var akoonL = (e.timeStamp != null) ? e.timeStamp : Date.now(); +if (zamanGham && akoonL - zamanGham > 120) { vx = vy = 0; } +aghazLokhti(); +doAngoshtBood = false; +} +} +}); +khod._gereh.addEventListener('touchcancel', function () { +halat = HALAT_HICH; jabejaShod = false; doAngoshtBood = false; +toghfeLokhti(); +khod._gereh.classList.remove('mz-dast-basteh'); +}); +}; +Naghshe.prototype._noghteAzSafhe = function (cx, cy) { +var r = this._ghabEshareh || this._gereh.getBoundingClientRect(); +var x = cx - r.left, y = cy - r.top; +if (this._jonoobBala) { x = this._pahna - x; y = this._boland - y; } +return new Nogte(x, y); +}; +Naghshe.prototype._noghteRoydad = function (e) { +var t = e.touches && e.touches[0] ? e.touches[0] +: (e.changedTouches && e.changedTouches[0] ? e.changedTouches[0] : e); +return this._noghteAzSafhe(t.clientX, t.clientY); +}; +Naghshe.prototype._zTars = function () { return Math.round(this._bozorgnamai); }; +Naghshe.prototype._mabda = function () { +var z = this._zTars(); +var c = tasvir(this._markazMokan.arz, this._markazMokan.tool, z); +return new Nogte(c.x - this._pahna / 2, c.y - this._boland / 2); +}; +Naghshe.prototype.mokanBePiksel = function (mokan) { +mokan = Mokan.az(mokan); +var mabda = this._mabda(); +var p = tasvir(mokan.arz, mokan.tool, this._zTars()); +return new Nogte(p.x - mabda.x, p.y - mabda.y); +}; +Naghshe.prototype.pikselBeMokan = function (noghte) { +var mabda = this._mabda(); +return vaTasvir(mabda.x + noghte.x, mabda.y + noghte.y, this._zTars()); +}; +Naghshe.prototype._jaijaPikseli = function (dx, dy) { +var mabda = this._mabda(); +this._markazMokan = mokanNormal(vaTasvir(mabda.x + this._pahna / 2 + dx, mabda.y + this._boland / 2 + dy, this._zTars())); +this._jahatPX = (this._jahatPX || 0) + dx; +this._jahatPY = (this._jahatPY || 0) + dy; +this._tazehQab(); +this.partab('harekat', { markaz: this.gereftanMarkaz() }); +}; +Naghshe.prototype._pishVakeshiJahati = function () { +var jx = this._jahatPX || 0, jy = this._jahatPY || 0; +this._jahatPX = 0; this._jahatPY = 0; +var jamAbs = Math.abs(jx) + Math.abs(jy); +if (jamAbs < 4) return; +var z = this._zTars(); +var mabda = this._mabda(); +var amghAfghi = jx !== 0 ? (jx > 0 ? 3 : -3) : 0; +var amghAmoodi = jy !== 0 ? (jy > 0 ? 3 : -3) : 0; +for (var i = 0; i < this._layeHa.length; i++) { +var l = this._layeHa[i]; +if (l._pishVakeshiHalgheh) l._pishVakeshiHalgheh(z, mabda, this._pahna, this._boland, amghAfghi, amghAmoodi); +} +}; +Naghshe.prototype._zoomPiramoon = function (dz, noghte) { +if (this._parvazRaf) { cancelAnimationFrame(this._parvazRaf); this._parvazRaf = null; } +this._toghfeLokhtiPikseli(); +var zKonoon = this._zTars(); +var jadid = mahdud(zKonoon + dz, this._kamZoom, this._ziadZoom); +if (jadid === zKonoon && this._bozorgnamai === jadid) return; +var mabda = this._mabda(); +var joft = vaTasvir(mabda.x + noghte.x, mabda.y + noghte.y, zKonoon); +this._bozorgnamai = jadid; +var np = tasvir(joft.arz, joft.tool, jadid); +this._markazMokan = mokanNormal(vaTasvir(np.x - noghte.x + this._pahna / 2, np.y - noghte.y + this._boland / 2, jadid)); +this._tazehHame(); +this.partab('zoom', { zoom: jadid }); +}; +Naghshe.prototype._zoomNarmCharkh = function (dz, noghte) { +if (!dz) return; +var z0 = this._zTars(); +if (!this._charkhRaf) this._toghfeLokhtiPikseli(); +var zamanNo = zamanAknoon(); +var edameh = !!this._charkhRaf || +(this._charkhZaman != null && (zamanNo - this._charkhZaman) < 400 && this._charkhPayeAnb != null); +this._charkhZaman = zamanNo; +if (!edameh) { this._charkhPayeAnb = z0; this._charkhAnbashteh = 0; } +this._charkhAnbashteh += dz; +var SAGHF_PISH = 2; +var zZendeh = (this._charkhRaf && this._charkhKonoon != null) ? this._charkhKonoon : z0; +var pish = zZendeh - this._charkhPayeAnb; +this._charkhAnbashteh = mahdud(this._charkhAnbashteh, pish - SAGHF_PISH, pish + SAGHF_PISH); +this._charkhAnbashteh = mahdud(this._charkhAnbashteh, +this._kamZoom - this._charkhPayeAnb, +this._ziadZoom - this._charkhPayeAnb); +var hadafNo = mahdud(Math.round(this._charkhPayeAnb + this._charkhAnbashteh), +this._kamZoom, this._ziadZoom); +if (this._charkhRaf) { this._charkhHadaf = hadafNo; return; } +if (hadafNo === z0) return; +this._charkhHadaf = hadafNo; +this._charkhNoghte = noghte || new Nogte(this._pahna / 2, this._boland / 2); +var mabdaK = this._mabda(); +var joftK = vaTasvir(mabdaK.x + this._charkhNoghte.x, mabdaK.y + this._charkhNoghte.y, z0); +var npK = tasvir(joftK.arz, joftK.tool, this._charkhHadaf); +var markazHadaf = vaTasvir( +npK.x - this._charkhNoghte.x + this._pahna / 2, +npK.y - this._charkhNoghte.y + this._boland / 2, this._charkhHadaf); +this._pishBarHame(this._charkhHadaf, markazHadaf); +var khod = this, az = z0, konoon = z0, zamanGhabli = null; +this._charkhKonoon = konoon; +var gam = function (zamanQab) { +if (zamanQab == null) zamanQab = zamanAknoon(); +var faseleZamani = (zamanGhabli == null) ? QAB_PAYEH : Math.min(zamanQab - zamanGhabli, 64); +zamanGhabli = zamanQab; +konoon += (khod._charkhHadaf - konoon) * (1 - Math.pow(1 - 0.2, faseleZamani / QAB_PAYEH)); +var tamam = Math.abs(khod._charkhHadaf - konoon) < 0.008; +if (tamam) konoon = khod._charkhHadaf; +khod._charkhKonoon = konoon; +var paridan = !tamam && Math.abs(konoon - az) > 0.5; +if (paridan) { +var zMiyani = mahdud(Math.round(konoon), khod._kamZoom, khod._ziadZoom); +if (zMiyani !== az) { khod._jabejaTrazCharkh(zMiyani); az = zMiyani; } else paridan = false; +} +khod._tanzimTarnsformZoom(khod._charkhNoghte, Math.pow(2, konoon - az)); +if (paridan) { khod._tazehHame(); khod.partab('zoom', { zoom: az }); } +if (tamam) { +khod._charkhRaf = null; +khod._charkhKonoon = null; +khod._pakTarnsformZoom(); +var dzKol = khod._charkhHadaf - az; +if (dzKol !== 0) khod._zoomPiramoon(dzKol, khod._charkhNoghte); else khod._tazehHame(); +return; +} +khod._charkhRaf = requestAnimationFrame(gam); +}; +this._charkhRaf = requestAnimationFrame(gam); +}; +var ASTANE_DANDE = 40; +var PIKSEL_HAR_TRAZ = 60; +Naghshe.prototype._dzCharkh = function (e) { +var px = e.deltaY; +if (!px) return 0; +var neshaneh = px < 0 ? 1 : -1; +var andazeh = Math.abs(px); +if (e.deltaMode) return neshaneh; +if (andazeh < ASTANE_DANDE) return neshaneh * (andazeh / PIKSEL_HAR_TRAZ); +return neshaneh; +}; +Naghshe.prototype.tanzimJonoobBala = function (v) { +v = v !== false; +if (this._jonoobBala === v) return this; +this._jonoobBala = v; +this._gereh.classList.toggle('mz-jonoob-bala', v); +this.partab('jonoobBala', { jonoobBala: v }); +return this; +}; +Naghshe.prototype.gereftanJonoobBala = function () { return !!this._jonoobBala; }; +Naghshe.prototype._hameDaman = function () { +return [this._damanKashi, this._damanNeshan, this._boomSvg, this._damanRoo]; +}; +Naghshe.prototype._tanzimTarnsformZoom = function (noghteMabda, meghyas) { +var origin = noghteMabda.x + 'px ' + noghteMabda.y + 'px'; +var scaleStr = 'scale(' + meghyas + ')'; +if (this._jonoobBala) { +var mx = this._pahna / 2, my = this._boland / 2; +origin = '0 0'; +scaleStr = 'translate(' + mx + 'px,' + my + 'px) rotate(180deg) translate(' + (-mx) + 'px,' + (-my) + 'px) ' + +'translate(' + noghteMabda.x + 'px,' + noghteMabda.y + 'px) scale(' + meghyas + ') ' + +'translate(' + (-noghteMabda.x) + 'px,' + (-noghteMabda.y) + 'px)'; +} +this._zoomZendeh = { x: noghteMabda.x, y: noghteMabda.y, s: meghyas }; +var haa = this._hameDaman(); +for (var i = 0; i < haa.length; i++) { +var d = haa[i]; +if (!d) continue; +d.style.willChange = 'transform'; +d.style.transformOrigin = origin; +d.style.transform = scaleStr; +} +}; +Naghshe.prototype._pakTarnsformZoom = function () { +this._zoomZendeh = null; +var haa = this._hameDaman(); +for (var i = 0; i < haa.length; i++) { +var d = haa[i]; +if (!d) continue; +d.style.transform = ''; d.style.transformOrigin = ''; d.style.willChange = ''; +} +}; +Naghshe.prototype._pishBarHame = function (zHadaf, markazMokan) { +for (var i = 0; i < this._layeHa.length; i++) { +if (this._layeHa[i].pishBar) this._layeHa[i].pishBar(zHadaf, markazMokan); +} +}; +Naghshe.prototype._zoomBeMarkaz = function (zHadaf, noghteThabet) { +zHadaf = mahdud(zHadaf, this._kamZoom, this._ziadZoom); +if (this._charkhPaye == null) this._charkhPaye = this._zTars(); +var zPaye = this._charkhPaye; +this._bozorgnamai = zHadaf; +if (Math.abs(zHadaf - zPaye) >= 1) { +this._neshandanFeshor(noghteThabet); +this._charkhPaye = this._zTars(); +this.partab('zoom', { zoom: this.gereftanZoom() }); +return this; +} +var samt = zHadaf - zPaye; +if (Math.abs(samt) > 0.4) { +var zHam = zPaye + (samt > 0 ? 1 : -1); +this._pishBarHame(zHam, this._markazDarNoghte(noghteThabet, zPaye, zHam)); +} +this._tanzimTarnsformZoom(noghteThabet, Math.pow(2, zHadaf - zPaye)); +this.partab('zoom', { zoom: this.gereftanZoom() }); +return this; +}; +Naghshe.prototype._neshandanFeshor = function (noghteThabet) { +var z0 = this._charkhPaye != null ? this._charkhPaye : this._zTars(); +this._pakTarnsformZoom(); +this._charkhPaye = null; +var zNo = this._zTars(); +this._bozorgnamai = zNo; +if (zNo !== z0) { +var mabda = this._mabda_dar(z0); +var joft = vaTasvir(mabda.x + noghteThabet.x, mabda.y + noghteThabet.y, z0); +var np = tasvir(joft.arz, joft.tool, zNo); +this._markazMokan = mokanNormal(vaTasvir(np.x - noghteThabet.x + this._pahna / 2, np.y - noghteThabet.y + this._boland / 2, zNo)); +} +this._tazehHame(); +this.partab('zoom', { zoom: zNo }); +return this; +}; +Naghshe.prototype._mabda_dar = function (z) { +var c = tasvir(this._markazMokan.arz, this._markazMokan.tool, z); +return new Nogte(c.x - this._pahna / 2, c.y - this._boland / 2); +}; +Naghshe.prototype._markazDarNoghte = function (noghte, z0, zNo) { +var mabda = this._mabda(); +var joft = vaTasvir(mabda.x + noghte.x, mabda.y + noghte.y, z0); +var np = tasvir(joft.arz, joft.tool, zNo); +return vaTasvir(np.x - noghte.x + this._pahna / 2, np.y - noghte.y + this._boland / 2, zNo); +}; +Naghshe.prototype._tazehHame = function () { +if (!this._charkhRaf && this._charkhPaye == null) this._pakTarnsformZoom(); +for (var i = 0; i < this._layeHa.length; i++) { +var l = this._layeHa[i]; +if (l.tazeh) l.tazeh(); +if (l.jaGozari) l.jaGozari(); +if (l.bekesh) l.bekesh(); +if (l.pimayesh) l.pimayesh(function (o) { +if (o.jaGozari) o.jaGozari(); +if (o.bekesh) o.bekesh(); +}); +} +if (this._panjereBaz) this._panjereBaz.jaGozari(); +this.partab('bazTarsim'); +}; +Naghshe.prototype._tazehQab = function () { +var khod = this; +if (this._qab) return; +this._qab = requestAnimationFrame(function () { +khod._qab = null; +khod._tazehHame(); +khod._pishVakeshiJahati(); +}); +}; +Naghshe.prototype._sabtLaye = function (l) { if (this._layeHa.indexOf(l) === -1) this._layeHa.push(l); }; +Naghshe.prototype._hazfLaye = function (l) { var i = this._layeHa.indexOf(l); if (i > -1) this._layeHa.splice(i, 1); }; +Naghshe.prototype.tanzimNama = function (markaz, zoom) { +this._markazMokan = mokanNormal(Mokan.az(markaz)); +if (zoom != null) this._bozorgnamai = mahdud(zoom, this._kamZoom, this._ziadZoom); +this._tazehHame(); +this.partab('harekat', { markaz: this.gereftanMarkaz() }); +if (zoom != null) this.partab('zoom', { zoom: this.gereftanZoom() }); +return this; +}; +Naghshe.prototype.gereftanMarkaz = function () { return this._markazMokan.baArayeh(); }; +Naghshe.prototype.gereftanZoom = function () { return Math.round(this._bozorgnamai); }; +Naghshe.prototype.gereftanKaran = function () { +var mabda = this._mabda(), z = this._zTars(); +var jg = vaTasvir(mabda.x, mabda.y + this._boland, z); +var ss = vaTasvir(mabda.x + this._pahna, mabda.y, z); +return new Karan([jg.arz, jg.tool], [ss.arz, ss.tool]); +}; +Naghshe.prototype.bozorgnamaiBish = function () { this._zoomPiramoonNarm(1); return this; }; +Naghshe.prototype.bozorgnamaiKam = function () { this._zoomPiramoonNarm(-1); return this; }; +Naghshe.prototype._zoomPiramoonNarm = function (dz) { +this._zoomNarmCharkh(dz, new Nogte(this._pahna / 2, this._boland / 2)); +}; +Naghshe.prototype.harkatNarm = function (markaz) { +return this._parvazBeMokan(Mokan.az(markaz), this._bozorgnamai, 350); +}; +Naghshe.prototype.parvaz = function (markaz, zoom, moddat) { +return this._parvazBeMokan(Mokan.az(markaz), zoom == null ? this._bozorgnamai : zoom, moddat || 800); +}; +Naghshe.prototype._parvazBeMokan = function (hadafMokan, hadafZoom, moddat) { +var khod = this; +hadafZoom = Math.round(mahdud(hadafZoom, this._kamZoom, this._ziadZoom)); +hadafMokan = mokanNormal(hadafMokan); +var azMokan = this._markazMokan, azZoom = this._bozorgnamai, shoroo = null; +var dTool = hadafMokan.tool - azMokan.tool; +if (dTool > 180) dTool -= 360; else if (dTool < -180) dTool += 360; +function gam(zaman) { +if (shoroo == null) shoroo = zaman; +var t = mahdud((zaman - shoroo) / moddat, 0, 1); +var e = narmesh(t); +khod._bozorgnamai = azZoom + (hadafZoom - azZoom) * e; +khod._markazMokan = mokanNormal(new Mokan( +azMokan.arz + (hadafMokan.arz - azMokan.arz) * e, +azMokan.tool + dTool * e +)); +khod._tazehHame(); +if (t < 1) khod._parvazRaf = requestAnimationFrame(gam); +else { +khod._parvazRaf = null; +khod._bozorgnamai = hadafZoom; +khod._markazMokan = hadafMokan; +khod._tazehHame(); +khod.partab('harekat', { markaz: khod.gereftanMarkaz() }); +khod.partab('zoom', { zoom: khod.gereftanZoom() }); +} +} +if (this._parvazRaf) cancelAnimationFrame(this._parvazRaf); +this._toghfeLokhtiPikseli(); +this._parvazRaf = requestAnimationFrame(gam); +return this; +}; +Naghshe.prototype.jaDadanKaran = function (karan, gozineh) { +gozineh = gozineh || {}; +if (!(karan instanceof Karan)) karan = new Karan(karan[0], karan[1]); +if (gozineh.hashieh) karan = karan.gostaresh(gozineh.hashieh); +var markaz = karan.markaz(); +var z = this._ziadZoom; +for (; z >= this._kamZoom; z--) { +var p1 = tasvir(karan.jg.arz, karan.jg.tool, z); +var p2 = tasvir(karan.ss.arz, karan.ss.tool, z); +if (Math.abs(p2.x - p1.x) <= this._pahna && Math.abs(p1.y - p2.y) <= this._boland) break; +} +z = mahdud(z, this._kamZoom, this._ziadZoom); +if (gozineh.parvaz) return this.parvaz(markaz, z); +return this.tanzimNama(markaz, z); +}; +Naghshe.prototype.afzoodan = function (laye) { laye.afzoodanBe(this); return this; }; +Naghshe.prototype.hazf = function (laye) { laye.hazf(); return this; }; +Naghshe.prototype.afzoodanAbzar = function (abzar) { abzar.afzoodanBe(this); return this; }; +Naghshe.prototype.makanYabi = function (gozineh) { +gozineh = gozineh || {}; +var khod = this; +if (!navigator.geolocation) { this.partab('makanKhata', { payam: 'موقعیت‌یاب در دسترس نیست' }); return this; } +navigator.geolocation.getCurrentPosition(function (mo) { +var mokan = new Mokan(mo.coords.latitude, mo.coords.longitude); +if (gozineh.parvaz !== false) khod.parvaz(mokan, gozineh.zoom || 15); +else if (gozineh.nama !== false) khod.tanzimNama(mokan, gozineh.zoom || khod.gereftanZoom()); +khod.partab('makanYab', { mokan: mokan, deghat: mo.coords.accuracy }); +}, function (kh) { +khod.partab('makanKhata', { payam: kh.message, code: kh.code }); +}, { +enableHighAccuracy: gozineh.deghatBala !== false, +timeout: gozineh.mohlat || 10000, maximumAge: gozineh.kohnegiMojaz || 0 +}); +return this; +}; +Naghshe.prototype.parvazBeKaran = function (karan, gozineh) { +gozineh = darham({ parvaz: true }, gozineh); +return this.jaDadanKaran(karan, gozineh); +}; +Naghshe.prototype.nabood = function () { +if (this._charkhRaf) cancelAnimationFrame(this._charkhRaf); +if (this._parvazRaf) cancelAnimationFrame(this._parvazRaf); +if (this._qab) cancelAnimationFrame(this._qab); +for (var i = this._layeHa.length - 1; i >= 0; i--) this._layeHa[i].hazf(); +this._gereh.innerHTML = ''; +this._gereh.classList.remove('mz-naghshe'); +this.off(); +return this; +}; +var Manzar = { +noskhe: NESKHE, +version: NESKHE, +_daroon: { +gozineshPooshesh: gozineshPooshesh, bazehKashi: bazehKashi, kelidKashi: kelidKashi, pichesh: pichesh, +sabetha: { hamzamani: KASHI_HAMZAMANI, ziadNiya: KASHI_ZIAD_NIYA, ziadFarzand: KASHI_ZIAD_FARZAND, mahv: KASHI_MAHV_MS, saghfKash: KASH_KASHI_SAGHF } +}, +naghshe: function (gereh, g) { return new Naghshe(gereh, g); }, +layeKashi: function (u, g) { return new LayeKashi(u, g); }, +layeKashiWMS: function (u, g) { return new LayeKashiWMS(u, g); }, +pushteshTasvir: function (u, k, g) { return new PushteshTasvir(u, k, g); }, +neshan: function (m, g) { return new Neshan(m, g); }, +neshanTasvir: function (g) { return new NeshanTasvir(g); }, +neshanDayereh: function (m, g) { return new NeshanDayereh(m, g); }, +panjere: function (g) { return new Panjere(g); }, +namak: function (g) { return new Namak(g); }, +khatShekaste: function (m, g) { return new KhatShekaste(m, g); }, +chandZeli: function (m, g) { return new ChandZeli(m, g); }, +dayereh: function (m, g) { return new Dayereh(m, g); }, +mostatil: function (k, g) { return new Mostatil(k, g); }, +goroohLaye: function (l) { return new GoroohLaye(l); }, +goroohArezeh: function (l) { return new GoroohArezeh(l); }, +geojson: function (d, g) { return new LayeGeoJSON(d, g); }, +abzarBozorgnamai: function (g) { return new AbzarBozorgnamai(g); }, +abzarEtebar: function (g) { return new AbzarEtebar(g); }, +abzarMeghyas: function (g) { return new AbzarMeghyas(g); }, +abzarLayeGozin: function (p, r, g) { return new AbzarLayeGozin(p, r, g); }, +abzarLayeha: function (p, r, g) { return new AbzarLayeha(p, r, g); }, +mokan: function (a, t) { return new Mokan(a, t); }, +karan: function (jg, ss) { return new Karan(jg, ss); }, +tasvir: tasvir, +vaTasvir: vaTasvir, +KASHI_RASAD: KASHI_PISHFARZ, +afzoone: function (kar) { if (typeof kar === 'function') kar(Manzar); return Manzar; }, +gostareshNaghshe: function (naam, kar) { Naghshe.prototype[naam] = kar; return Manzar; }, +Naghshe: Naghshe, Laye: Laye, LayeKashi: LayeKashi, LayeKashiWMS: LayeKashiWMS, +PushteshTasvir: PushteshTasvir, Neshan: Neshan, NeshanDayereh: NeshanDayereh, +NeshanTasvir: NeshanTasvir, Panjere: Panjere, Namak: Namak, +KhatShekaste: KhatShekaste, ChandZeli: ChandZeli, Dayereh: Dayereh, Mostatil: Mostatil, +GoroohLaye: GoroohLaye, GoroohArezeh: GoroohArezeh, LayeGeoJSON: LayeGeoJSON, +AbzarBozorgnamai: AbzarBozorgnamai, AbzarEtebar: AbzarEtebar, AbzarMeghyas: AbzarMeghyas, +AbzarLayeGozin: AbzarLayeGozin, AbzarLayeha: AbzarLayeha, Abzar: Abzar, +Nashani: Nashani, Mokan: Mokan, Karan: Karan, Nogte: Nogte +}; +return Manzar; +}));