Переглянути джерело

Redimensionnement des photos lors de l'upload

prodstable
keun 7 роки тому
джерело
коміт
11060bbc06
100 змінених файлів з 14257 додано та 8706 видалено
  1. +4
    -0
      common/config/main.php
  2. +38
    -3
      common/helpers/Upload.php
  3. +2
    -1
      composer.json
  4. +93
    -47
      composer.lock
  5. +1
    -2
      frontend/views/site/_cgv_content.php
  6. +2
    -2
      vendor/2amigos/yii2-leaflet-extension/README.md
  7. +2
    -2
      vendor/2amigos/yii2-leaflet-extension/composer.json
  8. +3
    -4
      vendor/2amigos/yii2-leaflet-extension/src/LeafLetAsset.php
  9. +552
    -3
      vendor/bower/leaflet/CHANGELOG.md
  10. +59
    -29
      vendor/bower/leaflet/CONTRIBUTING.md
  11. +34
    -10
      vendor/bower/leaflet/Jakefile.js
  12. +1
    -1
      vendor/bower/leaflet/LICENSE
  13. +97
    -3
      vendor/bower/leaflet/PLUGIN-GUIDE.md
  14. +6
    -8
      vendor/bower/leaflet/README.md
  15. +3
    -8
      vendor/bower/leaflet/bower.json
  16. +0
    -20
      vendor/bower/leaflet/component.json
  17. BIN
      vendor/bower/leaflet/dist/images/layers-2x.png
  18. BIN
      vendor/bower/leaflet/dist/images/layers.png
  19. BIN
      vendor/bower/leaflet/dist/images/marker-icon-2x.png
  20. BIN
      vendor/bower/leaflet/dist/images/marker-icon.png
  21. BIN
      vendor/bower/leaflet/dist/images/marker-shadow.png
  22. +11954
    -7871
      vendor/bower/leaflet/dist/leaflet-src.js
  23. +181
    -36
      vendor/bower/leaflet/dist/leaflet.css
  24. +7
    -7
      vendor/bower/leaflet/dist/leaflet.js
  25. +52
    -13
      vendor/bower/leaflet/package.json
  26. +1
    -0
      vendor/composer/autoload_namespaces.php
  27. +412
    -365
      vendor/composer/installed.json
  28. +1
    -1
      vendor/kartik-v/yii2-mpdf
  29. +2
    -1
      vendor/mpdf/mpdf/.gitignore
  30. +1
    -0
      vendor/mpdf/mpdf/classes/cssmgr.php
  31. +0
    -9
      vendor/mpdf/mpdf/config_fonts.php
  32. +1
    -0
      vendor/swiftmailer/swiftmailer/.gitignore
  33. +12
    -1
      vendor/swiftmailer/swiftmailer/CHANGES
  34. +1
    -1
      vendor/swiftmailer/swiftmailer/VERSION
  35. +2
    -1
      vendor/swiftmailer/swiftmailer/composer.json
  36. +10
    -6
      vendor/swiftmailer/swiftmailer/doc/messages.rst
  37. +0
    -2
      vendor/swiftmailer/swiftmailer/doc/overview.rst
  38. +4
    -40
      vendor/swiftmailer/swiftmailer/doc/sending.rst
  39. +2
    -0
      vendor/swiftmailer/swiftmailer/lib/classes/Swift/MailTransport.php
  40. +7
    -7
      vendor/swiftmailer/swiftmailer/lib/classes/Swift/Message.php
  41. +1
    -1
      vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php
  42. +1
    -5
      vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php
  43. +29
    -23
      vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php
  44. +8
    -8
      vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php
  45. +4
    -4
      vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php
  46. +9
    -9
      vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php
  47. +8
    -8
      vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php
  48. +1
    -0
      vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php
  49. +1
    -1
      vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php
  50. +1
    -1
      vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php
  51. +39
    -1
      vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/MailTransport.php
  52. +3
    -1
      vendor/swiftmailer/swiftmailer/phpunit.xml.dist
  53. +1
    -1
      vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/ByteStream/FileByteStreamAcceptanceTest.php
  54. +4
    -0
      vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/DependencyContainerAcceptanceTest.php
  55. +3
    -4
      vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/AbstractStreamBufferAcceptanceTest.php
  56. +1
    -2
      vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/BasicSocketAcceptanceTest.php
  57. +1
    -2
      vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/ProcessAcceptanceTest.php
  58. +1
    -1
      vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/SocketTimeoutTest.php
  59. +1
    -2
      vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/SslSocketAcceptanceTest.php
  60. +1
    -2
      vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/TlsSocketAcceptanceTest.php
  61. +1
    -1
      vendor/swiftmailer/swiftmailer/tests/bug/Swift/BugFileByteStreamConsecutiveReadCallsTest.php
  62. +10
    -9
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/ByteStream/ArrayByteStreamTest.php
  63. +7
    -7
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterStream/ArrayCharacterStreamTest.php
  64. +2
    -1
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/DependencyContainerTest.php
  65. +1
    -1
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/CommandEventTest.php
  66. +1
    -1
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/ResponseEventTest.php
  67. +2
    -2
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/SendEventTest.php
  68. +17
    -17
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/SimpleEventDispatcherTest.php
  69. +1
    -1
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/TransportChangeEventTest.php
  70. +1
    -1
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/TransportExceptionEventTest.php
  71. +3
    -3
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/KeyCache/ArrayKeyCacheTest.php
  72. +3
    -3
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/KeyCache/SimpleKeyCacheInputStreamTest.php
  73. +1
    -1
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/MessageTest.php
  74. +2
    -2
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/AbstractMimeEntityTest.php
  75. +1
    -1
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/MimePartTest.php
  76. +2
    -2
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleHeaderFactoryTest.php
  77. +2
    -2
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleHeaderSetTest.php
  78. +3
    -3
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleMessageTest.php
  79. +2
    -2
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/AntiFloodPluginTest.php
  80. +1
    -1
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/BandwidthMonitorPluginTest.php
  81. +2
    -2
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/LoggerPluginTest.php
  82. +2
    -2
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/PopBeforeSmtpPluginTest.php
  83. +1
    -1
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Reporters/HitReporterTest.php
  84. +1
    -1
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Reporters/HtmlReporterTest.php
  85. +1
    -2
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/EsmtpTransportTest.php
  86. +1
    -1
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/LoadBalancedTransportTest.php
  87. +32
    -2
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/MailTransportTest.php
  88. +1
    -2
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/SendmailTransportTest.php
  89. +2
    -2
      vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/StreamBufferTest.php
  90. +24
    -15
      vendor/yiisoft/extensions.php
  91. +0
    -1
      vendor/yiisoft/yii2-composer/.gitignore
  92. +9
    -0
      vendor/yiisoft/yii2-composer/CHANGELOG.md
  93. +76
    -5
      vendor/yiisoft/yii2-composer/Installer.php
  94. +175
    -2
      vendor/yiisoft/yii2-composer/Plugin.php
  95. +35
    -14
      vendor/yiisoft/yii2-composer/README.md
  96. +3
    -0
      vendor/yiisoft/yii2-composer/composer.json
  97. +27
    -0
      vendor/yiisoft/yii2-debug/CHANGELOG.md
  98. +6
    -2
      vendor/yiisoft/yii2-debug/LogTarget.php
  99. +98
    -8
      vendor/yiisoft/yii2-debug/Module.php
  100. +33
    -3
      vendor/yiisoft/yii2-debug/Panel.php

+ 4
- 0
common/config/main.php Переглянути файл

'cache' => [ 'cache' => [
'class' => 'yii\caching\FileCache', 'class' => 'yii\caching\FileCache',
], ],
'image' => [
'class' => 'yii\image\ImageDriver',
'driver' => 'GD', //GD or Imagick
],
], ],
'language' => 'fr-FR', 'language' => 'fr-FR',
]; ];

+ 38
- 3
common/helpers/Upload.php Переглянути файл

namespace common\helpers; namespace common\helpers;


use yii\web\UploadedFile; use yii\web\UploadedFile;
use Yii ;


class Upload { class Upload {


public static function uploadFile($model, $champs, $filename_old = '') { public static function uploadFile($model, $champs, $filename_old = '') {
$file = UploadedFile::getInstance($model, $champs); $file = UploadedFile::getInstance($model, $champs);
if ($file) { if ($file) {
$file_name = $file->baseName . '-' . uniqid() . '.' . $file->extension;
$file->saveAs('../../frontend/web/uploads/' . $file_name);
$model->$champs = $file_name;
$file_name = $file->baseName . '-' . uniqid() ;
$file_name_extension = $file_name .'.'.$file->extension ;
$dir_file = '../../frontend/web/uploads/' ;
$path_file = $dir_file . $file_name_extension ;
$file->saveAs($path_file);
// resize image
list($width, $height, $type, $attr) = getimagesize($path_file);
if($width > 500)
{
$image = Yii::$app->image->load($path_file);
// big
if($width > 1600)
{
$image->resize(1600)
->save($dir_file . $file_name . '-big.'.$file->extension);
}
// medium
if($width > 1024)
{
$image->resize(1024)->save($dir_file . $file_name_extension) ;
$image->save($dir_file . $file_name . '-medium.'.$file->extension);
}
// small
if($width > 500)
{
$image->resize(500)
->save($dir_file . $file_name . '-small.'.$file->extension);
}
}
$model->$champs = $file_name_extension ;
} else { } else {
$model->$champs = $filename_old; $model->$champs = $filename_old;
} }

+ 2
- 1
composer.json Переглянути файл

"2amigos/yii2-chartjs-widget": "~2.0.0", "2amigos/yii2-chartjs-widget": "~2.0.0",
"2amigos/yii2-leaflet-extension" : "*", "2amigos/yii2-leaflet-extension" : "*",
"kartik-v/yii2-mpdf": "dev-master", "kartik-v/yii2-mpdf": "dev-master",
"c006/yii2-paypal-ipn": "dev-master"
"c006/yii2-paypal-ipn": "dev-master",
"yurkinx/yii2-image": "dev-master"
}, },
"require-dev": { "require-dev": {
"yiisoft/yii2-codeception": "*", "yiisoft/yii2-codeception": "*",

+ 93
- 47
composer.lock Переглянути файл

"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"hash": "f8681a0fe3b2338999c789985d8bc0a0",
"content-hash": "9ea68729b85dcd5dfed9eb8bb575dbde",
"hash": "d41b7108eb456542c97aaf1f4b6a206b",
"content-hash": "1cec9ac50b0fd15427454cbf2d701105",
"packages": [ "packages": [
{ {
"name": "2amigos/yii2-chartjs-widget", "name": "2amigos/yii2-chartjs-widget",
}, },
{ {
"name": "2amigos/yii2-leaflet-extension", "name": "2amigos/yii2-leaflet-extension",
"version": "1.0.2",
"version": "1.0.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/2amigos/yii2-leaflet-extension.git", "url": "https://github.com/2amigos/yii2-leaflet-extension.git",
"reference": "05ac1496b0b7a5c7bdeec110a02f0e36d0a91e88"
"reference": "acaea5a6c33db1e4d9dbed040d7ad87c915928d4"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/2amigos/yii2-leaflet-extension/zipball/05ac1496b0b7a5c7bdeec110a02f0e36d0a91e88",
"reference": "05ac1496b0b7a5c7bdeec110a02f0e36d0a91e88",
"url": "https://api.github.com/repos/2amigos/yii2-leaflet-extension/zipball/acaea5a6c33db1e4d9dbed040d7ad87c915928d4",
"reference": "acaea5a6c33db1e4d9dbed040d7ad87c915928d4",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"bower-asset/leaflet": "0.7.*@stable",
"yiisoft/yii2": "~2.0.0"
"bower-asset/leaflet": "^1.0",
"yiisoft/yii2": "^2.0"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "4.*" "phpunit/phpunit": "4.*"
"yii", "yii",
"yii2" "yii2"
], ],
"time": "2016-02-05 23:47:38"
"time": "2016-12-06 14:54:20"
}, },
{ {
"name": "bower-asset/bootstrap", "name": "bower-asset/bootstrap",
}, },
{ {
"name": "bower-asset/leaflet", "name": "bower-asset/leaflet",
"version": "v0.7.7",
"version": "v1.0.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Leaflet/Leaflet.git", "url": "https://github.com/Leaflet/Leaflet.git",
"reference": "197f9d43b7bbc73c0492bf62cd666a5a98038098"
"reference": "ed36a04aefd12cb92c78074fe63a8e460db1d464"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Leaflet/Leaflet/zipball/197f9d43b7bbc73c0492bf62cd666a5a98038098",
"reference": "197f9d43b7bbc73c0492bf62cd666a5a98038098",
"url": "https://api.github.com/repos/Leaflet/Leaflet/zipball/ed36a04aefd12cb92c78074fe63a8e460db1d464",
"reference": "ed36a04aefd12cb92c78074fe63a8e460db1d464",
"shasum": "" "shasum": ""
}, },
"type": "bower-asset-library", "type": "bower-asset-library",
"extra": { "extra": {
"bower-asset-main": [ "bower-asset-main": [
"dist/leaflet.css", "dist/leaflet.css",
"dist/leaflet-src.js",
"dist/images/layers-2x.png",
"dist/images/layers.png",
"dist/images/marker-icon-2x.png",
"dist/images/marker-icon.png",
"dist/images/marker-shadow.png"
"dist/leaflet-src.js"
], ],
"bower-asset-ignore": [ "bower-asset-ignore": [
".*", ".*",
"build" "build"
] ]
}, },
"license": [
"BSD-2-Clause"
],
"description": "JavaScript library for mobile-friendly interactive maps" "description": "JavaScript library for mobile-friendly interactive maps"
}, },
{ {
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/kartik-v/yii2-mpdf.git", "url": "https://github.com/kartik-v/yii2-mpdf.git",
"reference": "94de4fd901036bb086bf86e10509649345b462a0"
"reference": "17fda1cb084c58fee6014026d35af5faf73316ef"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/kartik-v/yii2-mpdf/zipball/94de4fd901036bb086bf86e10509649345b462a0",
"reference": "94de4fd901036bb086bf86e10509649345b462a0",
"url": "https://api.github.com/repos/kartik-v/yii2-mpdf/zipball/17fda1cb084c58fee6014026d35af5faf73316ef",
"reference": "17fda1cb084c58fee6014026d35af5faf73316ef",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"utf8", "utf8",
"yii2" "yii2"
], ],
"time": "2016-11-03 17:25:48"
"time": "2017-01-14 11:51:12"
}, },
{ {
"name": "mpdf/mpdf", "name": "mpdf/mpdf",
"version": "v6.1.2",
"version": "v6.1.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/mpdf/mpdf.git", "url": "https://github.com/mpdf/mpdf.git",
"reference": "da078bc2669d3f98553ac41f920ead4c17c951ad"
"reference": "7f138bf7508eac895ac2c13d2509b056ac7e7e97"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/mpdf/mpdf/zipball/da078bc2669d3f98553ac41f920ead4c17c951ad",
"reference": "da078bc2669d3f98553ac41f920ead4c17c951ad",
"url": "https://api.github.com/repos/mpdf/mpdf/zipball/7f138bf7508eac895ac2c13d2509b056ac7e7e97",
"reference": "7f138bf7508eac895ac2c13d2509b056ac7e7e97",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php", "php",
"utf-8" "utf-8"
], ],
"time": "2016-07-20 12:31:58"
"time": "2016-12-12 10:42:18"
}, },
{ {
"name": "setasign/fpdi", "name": "setasign/fpdi",
}, },
{ {
"name": "swiftmailer/swiftmailer", "name": "swiftmailer/swiftmailer",
"version": "v5.4.3",
"version": "v5.4.5",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/swiftmailer/swiftmailer.git", "url": "https://github.com/swiftmailer/swiftmailer.git",
"reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153"
"reference": "cd142238a339459b10da3d8234220963f392540c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/4cc92842069c2bbc1f28daaaf1d2576ec4dfe153",
"reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153",
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/cd142238a339459b10da3d8234220963f392540c",
"reference": "cd142238a339459b10da3d8234220963f392540c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=5.3.3" "php": ">=5.3.3"
}, },
"require-dev": { "require-dev": {
"mockery/mockery": "~0.9.1"
"mockery/mockery": "~0.9.1",
"symfony/phpunit-bridge": "~3.2"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"mail", "mail",
"mailer" "mailer"
], ],
"time": "2016-07-08 11:51:25"
"time": "2016-12-29 10:02:40"
}, },
{ {
"name": "yiisoft/yii2", "name": "yiisoft/yii2",
}, },
{ {
"name": "yiisoft/yii2-composer", "name": "yiisoft/yii2-composer",
"version": "2.0.4",
"version": "2.0.5",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/yiisoft/yii2-composer.git", "url": "https://github.com/yiisoft/yii2-composer.git",
"reference": "7452fd908a5023b8bb5ea1b123a174ca080de464"
"reference": "3f4923c2bde6caf3f5b88cc22fdd5770f52f8df2"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/7452fd908a5023b8bb5ea1b123a174ca080de464",
"reference": "7452fd908a5023b8bb5ea1b123a174ca080de464",
"url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/3f4923c2bde6caf3f5b88cc22fdd5770f52f8df2",
"reference": "3f4923c2bde6caf3f5b88cc22fdd5770f52f8df2",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"composer-plugin-api": "^1.0" "composer-plugin-api": "^1.0"
}, },
"require-dev": {
"composer/composer": "^1.0"
},
"type": "composer-plugin", "type": "composer-plugin",
"extra": { "extra": {
"class": "yii\\composer\\Plugin", "class": "yii\\composer\\Plugin",
"extension installer", "extension installer",
"yii2" "yii2"
], ],
"time": "2016-02-06 00:49:24"
"time": "2016-12-20 13:26:02"
}, },
{ {
"name": "yiisoft/yii2-swiftmailer", "name": "yiisoft/yii2-swiftmailer",
"yii2" "yii2"
], ],
"time": "2016-09-09 11:48:11" "time": "2016-09-09 11:48:11"
},
{
"name": "yurkinx/yii2-image",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/yurkinx/yii2-image.git",
"reference": "2737b1ef4cefbc4c664892c6b9f29847fcf72c56"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/yurkinx/yii2-image/zipball/2737b1ef4cefbc4c664892c6b9f29847fcf72c56",
"reference": "2737b1ef4cefbc4c664892c6b9f29847fcf72c56",
"shasum": ""
},
"require": {
"php": ">=5.4.0",
"yiisoft/yii2": "*"
},
"type": "yii2-extension",
"autoload": {
"psr-0": {
"yii\\image\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Yuri Kileev",
"email": "kileev@gmail.com"
}
],
"description": "Yii2 extension for image manipulating using Kohana Image Library.",
"homepage": "https://github.com/yurkinx/yii2-image",
"keywords": [
"extension",
"image",
"yii2"
],
"time": "2016-12-08 19:34:11"
} }
], ],
"packages-dev": [ "packages-dev": [
}, },
{ {
"name": "yiisoft/yii2-debug", "name": "yiisoft/yii2-debug",
"version": "2.0.6",
"version": "2.0.7",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/yiisoft/yii2-debug.git", "url": "https://github.com/yiisoft/yii2-debug.git",
"reference": "55ed2e853ed8050a34415f63a4da84f88a56f895"
"reference": "a74a2433ad1dfda30a253a92f6db52c131807432"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/55ed2e853ed8050a34415f63a4da84f88a56f895",
"reference": "55ed2e853ed8050a34415f63a4da84f88a56f895",
"url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/a74a2433ad1dfda30a253a92f6db52c131807432",
"reference": "a74a2433ad1dfda30a253a92f6db52c131807432",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"yiisoft/yii2": ">=2.0.4",
"yiisoft/yii2-bootstrap": "*"
"yiisoft/yii2": "~2.0.4",
"yiisoft/yii2-bootstrap": "~2.0.0"
}, },
"type": "yii2-extension", "type": "yii2-extension",
"extra": { "extra": {
"debugger", "debugger",
"yii2" "yii2"
], ],
"time": "2016-03-17 03:50:19"
"time": "2016-11-24 09:42:29"
}, },
{ {
"name": "yiisoft/yii2-faker", "name": "yiisoft/yii2-faker",
"minimum-stability": "stable", "minimum-stability": "stable",
"stability-flags": { "stability-flags": {
"kartik-v/yii2-mpdf": 20, "kartik-v/yii2-mpdf": 20,
"c006/yii2-paypal-ipn": 20
"c006/yii2-paypal-ipn": 20,
"yurkinx/yii2-image": 20
}, },
"prefer-stable": false, "prefer-stable": false,
"prefer-lowest": false, "prefer-lowest": false,

+ 1
- 2
frontend/views/site/_cgv_content.php Переглянути файл

<p>Les présentes Conditions Générales de Service ( ci-après les « <strong>Conditions</strong> ») <p>Les présentes Conditions Générales de Service ( ci-après les « <strong>Conditions</strong> »)
font partie intégrante du contrat conclu (le « <strong>Contrat</strong> ») entre <strong>La boîte à pain</strong>,
hébergée par <strong>Cap'Entreprendre</strong> inscrit en tant que <strong>Société coopérative exploitée sous forme de SARL</strong> au Registre du Commerce et des Sociétés
font partie intégrante du contrat conclu (le « <strong>Contrat</strong> ») entre <strong>La boîte à pain - Cap'Entreprendre</strong> inscrit en tant que <strong>SCOP SARL</strong> au Registre du Commerce et des Sociétés
de <strong>Sarreguemines</strong>, sous le numéro <strong>47784404700019</strong>, dont le siège social est situé au de <strong>Sarreguemines</strong>, sous le numéro <strong>47784404700019</strong>, dont le siège social est situé au
<strong>12 PLACE ROBERT SCHUMAN 57600 FORBACH</strong> (ci-après la « <strong>Société</strong> ») et l’artisan boulanger <strong>12 PLACE ROBERT SCHUMAN 57600 FORBACH</strong> (ci-après la « <strong>Société</strong> ») et l’artisan boulanger
souhaitant être référencé sur le site internet de la Société (le « <strong>Boulanger</strong> »).</p> souhaitant être référencé sur le site internet de la Société (le « <strong>Boulanger</strong> »).</p>

+ 2
- 2
vendor/2amigos/yii2-leaflet-extension/README.md Переглянути файл

'attribution' => 'Tiles Courtesy of <a href="http://www.mapquest.com/" target="_blank">MapQuest</a> ' . 'attribution' => 'Tiles Courtesy of <a href="http://www.mapquest.com/" target="_blank">MapQuest</a> ' .
'<img src="http://developer.mapquest.com/content/osm/mq_logo.png">, ' . '<img src="http://developer.mapquest.com/content/osm/mq_logo.png">, ' .
'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>', 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>',
'subdomains' => '1234'
]
'subdomains' => ['1', '2', '3', '4'],
],
]); ]);


// now our component and we are going to configure it // now our component and we are going to configure it

+ 2
- 2
vendor/2amigos/yii2-leaflet-extension/composer.json Переглянути файл

"source": "https://github.com/2amigos/yii2-leaflet-extension" "source": "https://github.com/2amigos/yii2-leaflet-extension"
}, },
"require": { "require": {
"yiisoft/yii2": "~2.0.0",
"bower-asset/leaflet": "0.7.*@stable"
"yiisoft/yii2": "^2.0",
"bower-asset/leaflet": "^1.0"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "4.*" "phpunit/phpunit": "4.*"

+ 3
- 4
vendor/2amigos/yii2-leaflet-extension/src/LeafLetAsset.php Переглянути файл

'leaflet.css' 'leaflet.css'
]; ];


public function init()
{
$this->js = YII_DEBUG ? ['leaflet-src.js'] : ['leaflet.js'];
}
public $js = [
'leaflet-src.js'
];
} }

+ 552
- 3
vendor/bower/leaflet/CHANGELOG.md Переглянути файл



(all changes without author notice are by [@mourner](https://github.com/mourner)) (all changes without author notice are by [@mourner](https://github.com/mourner))


## master

An in-progress version being developed on the `master` branch.

## 1.0.3 (November 21, 2016)

### Bug fixes

* Avoid extra `L.Canvas` redraws on several scenarios (by [@perliedman](https://github.com/perliedman), [#5250](https://github.com/Leaflet/Leaflet/pull/5034), also thanks to [@manubb](https://github.com/manubb) for investigation and PR).
* Fix behaviour of `dblclick` events in [Chrome 55 due to `PointerEvent`s](https://developers.google.com/web/updates/2016/11/nic55#pointer-events) (by [@IvanSanchez](https://github.com/IvanSanchez), [#5185](https://github.com/Leaflet/Leaflet/pull/5185), [#5248](https://github.com/Leaflet/Leaflet/pull/5248), [#5268](https://github.com/Leaflet/Leaflet/pull/5268)).
* Fix a dangling comma making IE8 fail to parse the code (by [@batje](https://github.com/batje), [#5270](https://github.com/Leaflet/Leaflet/pull/5270)).
* Backport event handling fixes from [#5054](https://github.com/Leaflet/Leaflet/pull/5054) into `L.SVG.VML` for IE8 (by [@IvanSanchez](https://github.com/IvanSanchez), [#5215](https://github.com/Leaflet/Leaflet/pull/5215)).
* Fix a race condition when closing popups during their `popupopen` event (by [@hagai26](https://github.com/hagai26), [#5202](https://github.com/Leaflet/Leaflet/pull/5202)).
* Fix `getBoundsZoom` return value on CRSs with a flipped axis (by [@computerlove](https://github.com/computerlove), [#5204](https://github.com/Leaflet/Leaflet/pull/5204)).
* Avoid infinite loops when the `errorTileUrl` of a `L.TileLayer` returns 404 (by [@IvanSanchez](https://github.com/IvanSanchez), [#5177](https://github.com/Leaflet/Leaflet/pull/5177)).
* Remove erroneous initialization of unused event listeners (by [@Brikky](https://github.com/Brikky), [#5160](https://github.com/Leaflet/Leaflet/pull/5160)).
* Fix rounding of `L.Canvas` redraw areas to avoid artifacts during partial updates (by [@Ernie23](https://github.com/Ernie23), [#5148](https://github.com/Leaflet/Leaflet/pull/5148)).
* Fix `isPopupOpen()` behaviour of `L.Layer` when no popup is bound to a layer (by [@gvangool](https://github.com/gvangool), [#5106](https://github.com/Leaflet/Leaflet/pull/5106)).
* Add a sanity check in `LatLngBounds.contains()` to allow for non-instantiated `LatLng` objects (by [@IvanSanchez](https://github.com/IvanSanchez), [#5135](https://github.com/Leaflet/Leaflet/pull/5135)).
* Fix collapsing of `L.Control.Layers` when the `collapse` option is `false` (by [@perliedman](https://github.com/perliedman), [#5131](https://github.com/Leaflet/Leaflet/pull/5131)).

### API changes

* Added a new `WrapLatLngBounds` method to `L.CRS`, to fix an issue with `maxBounds` of `GridLayer`s (by [@IvanSanchez](https://github.com/IvanSanchez), [#5185](https://github.com/Leaflet/Leaflet/pull/5185), also thanks to [@DiogoMCampos](https://github.com/DiogoMCampos) for investigation).
* `L.Map.getSize()` will now return `0` instead of `NaN` in non-graphical environments (by [@ughitsaaron](https://github.com/ughitsaaron), [#5209](https://github.com/Leaflet/Leaflet/pull/5209)).

### Improvements

* Several minor documentation improvements by [@IvanSanchez](https://github.com/IvanSanchez), [@jieter](https://github.com/jieter), [@alonsogarciapablo](https://github.com/alonsogarciapablo), [@jasonoverland](https://github.com/jasonoverland), [@danzel](https://github.com/danzel), [@ghybs](https://github.com/ghybs), [@Ralf8686](https://github.com/Ralf8686), [@geoloep](https://github.com/geoloep)
* Add an `alt` attribute to the `<img>`s of marker shadows (by [@topicus](https://github.com/topicus), [#5259](https://github.com/Leaflet/Leaflet/pull/5259)).

## 1.0.2 (November 21, 2016)

### Bug fixes

* Fix CSS for marker shadows when `max-width` is already set (by [@brunob](https://github.com/brunob), [#5046](https://github.com/Leaflet/Leaflet/pull/5046)).
* Fix canvas redraw when style updates fill and/or weight (by [@perliedman](https://github.com/perliedman), [#5034](https://github.com/Leaflet/Leaflet/pull/5034)).
* Prevent canvas from firing multiple `mouseover` events for same layer (by [@perliedman](https://github.com/perliedman), [#5033](https://github.com/Leaflet/Leaflet/pull/5033)).
* Fixed a race condition when removing and adding `L.Canvas` vectors during a zoom animation (by [@ghybs](https://github.com/ghybs)) [#5011](https://github.com/Leaflet/Leaflet/pull/5011).
* Fix zoom animation of ImageOverlay when CRS's Y axis is flipped (by [@perliedman](https://github.com/perliedman)), [#4993](https://github.com/Leaflet/Leaflet/pull/4993).
* Fix encoding/decoding of GeoJSON `FeatureCollection`s (by [@IvanSanchez](https://github.com/IvanSanchez)), [#5045](https://github.com/Leaflet/Leaflet/issues/5045).
* Fix `minZoom`/`maxZoom` late inizialization (by [@IvanSanchez](https://github.com/IvanSanchez)), [#4916](https://github.com/Leaflet/Leaflet/pull/4916).
* Fix styling of custom SVG markers by making stricter CSS selectors (by [@jwoyame](https://github.com/jwoyame)) [#4597](https://github.com/Leaflet/Leaflet/pull/4597).
* Fix order of `mouseover`/`mouseout` events on overlapping `L.Canvas` layers (by [@perliedman](https://github.com/perliedman)), [#5090](https://github.com/Leaflet/Leaflet/pull/5090).
* Fix drag behaviour when a draggable marker is removed in mid-drag (by [@IvanSanchez](https://github.com/IvanSanchez), [#5063](https://github.com/Leaflet/Leaflet/pull/5063).
* Fix `L.Control.Layers.collapse()` on initially uncollapsed layer controls (by [@perliedman](https://github.com/perliedman)), [#5131](https://github.com/Leaflet/Leaflet/pull/5131).
* Fix blurriness of `L.Tooltip` by rounding up pixel coordinates (by [@ashmigelski](https://github.com/ashmigelski)), [#5089](https://github.com/Leaflet/Leaflet/pull/5089).
* Fix click events on overlapping geometries when using `L.Canvas` (by [@perliedman](https://github.com/perliedman)), [#5100](https://github.com/Leaflet/Leaflet/pull/5100).

### API changes

* Add a `sortLayers` option to `L.Control.Layers` (by [@IvanSanchez](https://github.com/IvanSanchez), [#4711](https://github.com/Leaflet/Leaflet/pull/4711).
* Implement `bringToFront` and `bringToBack` when using `L.Canvas`, plus preventing other canvas glitches (by [@perliedman](https://github.com/perliedman)), [#5115](https://github.com/Leaflet/Leaflet/pull/5115).
* Add `minNativeZoom` option to `L.TileLayer`s. (by [@bb-juliogarcia](https://github.com/bb-juliogarcia)), [#5088](https://github.com/Leaflet/Leaflet/pull/5088).

### Improvements

* Improve performance when adding lots of `L.Path`s by refactoring away event logic (by [@IvanSanchez](https://github.com/IvanSanchez)) [#5054](https://github.com/Leaflet/Leaflet/pull/5054))].
* Several minor documentation improvements by [@Jmuccigr](https://github.com/Jmuccigr), [@serdarkacka](https://github.com/serdarkacka), [@erickzhao](https://github.com/erickzhao), [@IvanSanchez](https://github.com/IvanSanchez), [@perliedman](https://github.com/perliedman), [@joukewitteveen](https://github.com/joukewitteveen).
* Code reorganization: Extensions for `L.Marker` and `L.Map` no longer have a separate file (by [@mourner](https://github.com/mourner)).
* Removed a duplicated unit test ([@yohanboniface](https://github.com/yohanboniface)).
* Accesibility improvements (ARIA/screenreader related) on map tiles (by [@patrickarlt](https://github.com/patrickarlt)) [#5092](https://github.com/Leaflet/Leaflet/pull/5092).

## 1.0.1 (September 30, 2016)

### Bug fixes

* Fixed vector rendering regression in IE8 (by [@perliedman](https://github.com/perliedman)) [#4656](https://github.com/Leaflet/Leaflet/pull/4956).
* Fixed Webpack error when bundling Leaflet's CSS (by [@jefbarn](https://github.com/jefbarn)) [#4679](https://github.com/Leaflet/Leaflet/pull/4979).

## 1.0.0 (September 26, 2016)

### API changes

* Remove deprecated `zoomanimated` option for `L.Popup`s (by [@fnicollet](https://github.com/fnicollet)) [#4699](https://github.com/Leaflet/Leaflet/pull/4699)

### Improvements

* Several minor fixes to the documentation (by [@IvanSanchez](https://github.com/IvanSanchez), [@alejo90](https://github.com/alejo90), [@ghybs](https://github.com/ghybs), [@JonasDralle](https://github.com/JonasDralle))
* Add license to `bower.json` (by [@anotherredward](https://github.com/anotherredward)) [#4865](https://github.com/Leaflet/Leaflet/pull/4865)
* Allow creating tooltips without a source layer (by [@yohanboniface](https://github.com/yohanboniface)) [#4836](https://github.com/Leaflet/Leaflet/pull/4836)
* Detect `L.Icon` default path using CSS (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4605](https://github.com/Leaflet/Leaflet/pull/4605)

### Bug fixes

* Fix handling of `getScaleZoom` in some custom CRSs (by [@theashyster](https://github.com/theashyster)) [#4919](https://github.com/Leaflet/Leaflet/pull/4919)
* Guard `L.Path` event handlers against race conditions (by [@perliedman](https://github.com/perliedman) and [@IvanSanchez](https://github.com/IvanSanchez)) [#4855](https://github.com/Leaflet/Leaflet/pull/4855) [#4929](https://github.com/Leaflet/Leaflet/pull/4929) [#4838](https://github.com/Leaflet/Leaflet/pull/4838)
* In `L.GridLayer`s, wrap `tileBounds` when `noWrap` is false (by [@fyeah](https://github.com/fyeah)) [#4908](https://github.com/Leaflet/Leaflet/pull/4908)
* Fix `L.Path`'s `bringToFront()` behaviour in the Edge browser (by [@nikolai-b](https://github.com/nikolai-b)) [#4848](https://github.com/Leaflet/Leaflet/pull/4848)
* Remove spurious counting of event handlers (by [@perliedman](https://github.com/perliedman)) [#4842](https://github.com/Leaflet/Leaflet/pull/4842)
* Throw error on `getCenter()` when a `L.Polygon` has no map and thus no CRS (by [@snkashis](https://github.com/snkashis)) [#4820](https://github.com/Leaflet/Leaflet/pull/4820)
* Add a `_leaflet_id` to map containers to prevent error when removing a map twice (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4810](https://github.com/Leaflet/Leaflet/pull/4810)
* Do not fail when closing a tooltip which is not in a map (by [@yohanboniface](https://github.com/yohanboniface)) [#4937](https://github.com/Leaflet/Leaflet/pull/4937)


## 1.0-rc3 (August 5, 2016)

### API changes
- `L.Tooltip` `offset` option now defaults to `[0, 0]` (by [@yohanboniface](https://github.com/yohanboniface)) [#4773](https://github.com/Leaflet/Leaflet/pull/4773)
- Event listeners are now always called in the order they have been registered, while until rc2 listeners with a context were all called before listeners without context (even if registered later), and the listeners with context were called in an unpredictable order (by [@yohanboniface](https://github.com/yohanboniface)) [#4769](https://github.com/Leaflet/Leaflet/pull/4769)

### Improvements
- Added `oldLatLng` in `L.Marker` `drag` event (by [@snkashis](https://github.com/snkashis)) [#4752](https://github.com/Leaflet/Leaflet/pull/4752)

### Bug fixes
- Fixed regression where event listeners where not always fired in the order of registration (by [@yohanboniface](https://github.com/yohanboniface)) [#4769](https://github.com/Leaflet/Leaflet/pull/4769)
- Fixed `L.Tooltip` zoom animation (by [@yohanboniface](https://github.com/yohanboniface)) [#4744](https://github.com/Leaflet/Leaflet/pull/4744)
- Fixed `layer.bindTooltip` crashing when called before adding the layer to the map (by [@yohanboniface](https://github.com/yohanboniface)) [#4779](https://github.com/Leaflet/Leaflet/pull/4779)
- Fixed regression in `L.Popup` autopaning (by [@yohanboniface](https://github.com/yohanboniface)) [#4768](https://github.com/Leaflet/Leaflet/pull/4768)
- Fixed non permanent `L.Tooltip` not being closed on touch when touching the map (by [@yohanboniface](https://github.com/yohanboniface)) [#4767](https://github.com/Leaflet/Leaflet/pull/4767)
- Fixed `popupopen` and `popupclose` not being fired when clicking on path with an open popup (by [@yohanboniface](https://github.com/yohanboniface)) [#4788](https://github.com/Leaflet/Leaflet/pull/4788)


## 1.0-rc2 (July 18, 2016)

### API changes
* Make `L.Handler.enable`/`disable` return `this` (by [@yohanboniface](https://github.com/yohanboniface)) [#4708](https://github.com/Leaflet/Leaflet/pull/4708)
* Icon `size` option can now be initialised with a number (by [@rheh](https://github.com/rheh)) [#4608](https://github.com/Leaflet/Leaflet/pull/4608)
* Add `classname` option to `L.GridLayer` (by [@jayvarner](https://github.com/jayvarner)) [#4553](https://github.com/Leaflet/Leaflet/pull/4553)
* Consistent returns for `Map.addLayer` (by [@nathancahill](https://github.com/nathancahill)) [#4504](https://github.com/Leaflet/Leaflet/pull/4504)
* Create points from objects with `x` and `y` properties (by [@nathancahill](https://github.com/nathancahill)) [#4465](https://github.com/Leaflet/Leaflet/pull/4465)
* Add `updateWhenZooming` option to `L.GridLayer` (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4462](https://github.com/Leaflet/Leaflet/pull/4462)

### Improvements
* Refactoring of events (by [@fab1an](https://github.com/fab1an) and [@perliedman](https://github.com/perliedman)) [#4697](https://github.com/Leaflet/Leaflet/pull/4697)
* Do not alter `popup.options.offset` when computing popup offset (fix #4645) (by [@yohanboniface](https://github.com/yohanboniface)) [#4662](https://github.com/Leaflet/Leaflet/pull/4662)
* Use different `L.Bounds` for "marking as prunable" and loading tiles (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4650](https://github.com/Leaflet/Leaflet/pull/4650)
* Added `L.Tooltip` class to display small tooltips on the map (by [@yohanboniface](https://github.com/yohanboniface)) [#3952](https://github.com/Leaflet/Leaflet/pull/3952)

### Bug fixes
* Fixed `GridLayer`'s outer edge snapping to vertical center of map (fix #4702) (by [@yohanboniface](https://github.com/yohanboniface)) [#4704](https://github.com/Leaflet/Leaflet/pull/4704)
* Fixed scrollwheel zoom too fast in MS Edge (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4694](https://github.com/Leaflet/Leaflet/pull/4694)
* Use `pointer-events: visiblePainted` as fallback for IE <11 (by [@perliedman](https://github.com/perliedman)) [#4690](https://github.com/Leaflet/Leaflet/pull/4690)
* Avoid double borders on `abbr` in website (by [@brunob](https://github.com/brunob)) [#4663](https://github.com/Leaflet/Leaflet/pull/4663)
* Prevent firing map click when layer has popup (by [@jwoyame](https://github.com/jwoyame)) [#4603](https://github.com/Leaflet/Leaflet/pull/4603)
* Disable pointer events on popup tip (by [@jwoyame](https://github.com/jwoyame)) [#4599](https://github.com/Leaflet/Leaflet/pull/4599)
* Prevent `L.DomUtil.create()` from automatically setting a CSS class name (by [@MuellerMatthew](https://github.com/MuellerMatthew)) [#4563](https://github.com/Leaflet/Leaflet/pull/4563)
* Fix off-by-one bug in `Control.Layers._getLayer` (by [@ValentinH](https://github.com/ValentinH)) [#4561](https://github.com/Leaflet/Leaflet/pull/4561)
* Fix scrollwheel events zomming two levelz in Chrome by scaling down `getWheelDelta()` (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4538](https://github.com/Leaflet/Leaflet/pull/4538)
* Prevent event listeners from being called when all listeners are removed (by [@perliedman](https://github.com/perliedman)) [#4555](https://github.com/Leaflet/Leaflet/pull/4555)
* Don't prevent browser's touch scroll and/or zoom unless handlers are enabled (by [@perliedman](https://github.com/perliedman)) [#4552](https://github.com/Leaflet/Leaflet/pull/4552)
* Fixed `getBoundsZoom` with small size and padding (by [@dianjin](https://github.com/dianjin)) [#4532](https://github.com/Leaflet/Leaflet/pull/4532)
* Fixed `L.Control.Layers` in IE8 (by [@jieter](https://github.com/jieter)) [#4509](https://github.com/Leaflet/Leaflet/pull/4509)
* Fixed `TileLayer`'s retina logic when `zoomReverse` is enabled. (by [@perliedman](https://github.com/perliedman)) [#4503](https://github.com/Leaflet/Leaflet/pull/4503)
* Fixed `setMaxBounds` not resetting `maxBounds` when passing `null` argument (by [@yohanboniface](https://github.com/yohanboniface)) [#4494](https://github.com/Leaflet/Leaflet/pull/4494)
* Fixed canvas not filtering click event after drag (by [@yohanboniface](https://github.com/yohanboniface)) [#4493](https://github.com/Leaflet/Leaflet/pull/4493)
* Fixed `L.Control.removeLayer()` raising an error when trying to remove a layer not yet added (by [@jieter](https://github.com/jieter)) [#4487](https://github.com/Leaflet/Leaflet/pull/4487)
* Fixed disabling drag on click in IE11 (by [@perliedman](https://github.com/perliedman)) [#4479](https://github.com/Leaflet/Leaflet/pull/4479)
* Fixed `L.Evented.listens()` on removed event handlers, #4474 (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4476](https://github.com/Leaflet/Leaflet/pull/4476)
* Better handling of `markerZoomAnimation` event hooks (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4460](https://github.com/Leaflet/Leaflet/pull/4460)


## 1.0-rc1 (April 18, 2016)

### API changes
* Make `L.Control.Layers.collapse`/`expand` public methods (by [@yohanboniface](https://github.com/yohanboniface)) [#4370](https://github.com/Leaflet/Leaflet/pull/4370)
* Make `L.latLngBounds` factory return an empty bounds with no argument (by [@yohanboniface](https://github.com/yohanboniface)) [#4368](https://github.com/Leaflet/Leaflet/pull/4368)
* `Map.fitBounds` now raises an error if bounds are not valid (by [@theotow](https://github.com/theotow)) [#4353](https://github.com/Leaflet/Leaflet/pull/4353)
* Temporarily support legacy options on `L.Circle` (by [@JrFolk](https://github.com/JrFolk)) [#4290](https://github.com/Leaflet/Leaflet/pull/4290)
* Throw error on `NaN` circle radius (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4237](https://github.com/Leaflet/Leaflet/pull/4237)
* `L.Class.include()` & `mergeOptions()` now return `this` (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4246](https://github.com/Leaflet/Leaflet/pull/4246)
* Consistent GeoJSON casing (by [@yohanboniface](https://github.com/yohanboniface)) [#4108](https://github.com/Leaflet/Leaflet/pull/4108)
* Move `L.LatLng.equals` to `L.CRS.equals`. (by [@perliedman](https://github.com/perliedman)) [#4074](https://github.com/Leaflet/Leaflet/pull/4074)
* Make non-interactive markers not firing pointer events (by [@IvanSanchez](https://github.com/IvanSanchez)) [#3937](https://github.com/Leaflet/Leaflet/pull/3937)


### Improvements
* Give popups an id (by [@tylercubell](https://github.com/tylercubell)) [#4355](https://github.com/Leaflet/Leaflet/pull/4355)
* Support `{-y}` in tile layer urls (by [@jieter](https://github.com/jieter)) [#4337](https://github.com/Leaflet/Leaflet/pull/4337)
* Support `dashArray` path option in canvas (by [@gommo](https://github.com/gommo)) [#4173](https://github.com/Leaflet/Leaflet/pull/4173)
* Clean up `navigator.pointerEnabled` (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4287](https://github.com/Leaflet/Leaflet/pull/4287)
* Use array in `L.Control.Layers` internally (by [@jieter](https://github.com/jieter)) [#4227](https://github.com/Leaflet/Leaflet/pull/4227)
* Implement `L.Browser.edge` (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4143](https://github.com/Leaflet/Leaflet/pull/4143)
* Optimized icons (by [@vtduncan](https://github.com/vtduncan)) [#4124](https://github.com/Leaflet/Leaflet/pull/4124)
* Cast `L.DivIcon.bgPos` option to `L.Point` (by [@perliedman](https://github.com/perliedman)) [#4090](https://github.com/Leaflet/Leaflet/pull/4090)
* Switch to wheel event where available (by [@mourner](https://github.com/mourner)) [#3653](https://github.com/Leaflet/Leaflet/pull/3653)
* Fractional zoom controls (by [@IvanSanchez](https://github.com/IvanSanchez) and [@hyperknot](https://github.com/hyperknot)) [#3523](https://github.com/Leaflet/Leaflet/pull/3523)
* Added click tolerance also for non-touch devices (by [DavidUv](https://github.com/DavidUv)) [#4396](https://github.com/Leaflet/Leaflet/pull/4396)

### Bug fixes
* Fixed an edge case on `Map.fitBounds` (by [@perliedman](https://github.com/perliedman)) [#4377](https://github.com/Leaflet/Leaflet/pull/4377)
* Fixed an edge case bug in `flyTo` (by [@hyperknot](https://github.com/hyperknot)) [#4376](https://github.com/Leaflet/Leaflet/pull/4376)
* Use mean earth radius for distance calculation in `L.CRS.Earth`. (by [@perliedman](https://github.com/perliedman)) [#4369](https://github.com/Leaflet/Leaflet/pull/4369)
* Fixed zoom event fired twice (by [@perliedman](https://github.com/perliedman)) [#4367](https://github.com/Leaflet/Leaflet/pull/4367)
* Initialize canvas dash on init. Check that canvas supports `setLineDash`. (by [@perliedman](https://github.com/perliedman)) [#4364](https://github.com/Leaflet/Leaflet/pull/4364)
* Do not calculate inverted y coords for CRSes with infinite: true (by [@jieter](https://github.com/jieter)) [#4344](https://github.com/Leaflet/Leaflet/pull/4344)
* Fixed zoom handling on `Map.TouchZoom` (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4340](https://github.com/Leaflet/Leaflet/pull/4340)
* Fixed `this._times.length` undefined in `Map.Drag.js` (by [@LucasMouraDeOliveira](https://github.com/LucasMouraDeOliveira)) [#4324](https://github.com/Leaflet/Leaflet/pull/4324)
* Fixed simulated click handling in `L.Path` (by [@elkami12](https://github.com/elkami12)) [#4314](https://github.com/Leaflet/Leaflet/pull/4314)
* Fixed attribution text not removed when Layer is removed from map (by [@dr-itz](https://github.com/dr-itz)) [#4293](https://github.com/Leaflet/Leaflet/pull/4293)
* Fixed bug when adding/removing a layer from `L.Control.Layer` that is not on the map (by [@errebenito](https://github.com/errebenito)) [#4280](https://github.com/Leaflet/Leaflet/pull/4280)
* Fixed `Map.attributionControl` only set on `addInitHook` (by [@snkashis](https://github.com/snkashis)) [#4263](https://github.com/Leaflet/Leaflet/pull/4263)
* Check for `e.originalEvent` in `DomUtil._filterclick` (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4256](https://github.com/Leaflet/Leaflet/pull/4256)
* Stop drag propagation on `L.Draggable` (by [@turban](https://github.com/turban)) [#4250](https://github.com/Leaflet/Leaflet/pull/4250)
* Fixed error when quickly removing a layer just added (by [@hyperknot](https://github.com/hyperknot)) [#4244](https://github.com/Leaflet/Leaflet/pull/4244)
* Fixed not resetting properly on `Map.stop` (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4229](https://github.com/Leaflet/Leaflet/pull/4229)
* Fixed conflict between `Map.fadeAnimation` and `GridLayer.opacity` (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4228](https://github.com/Leaflet/Leaflet/pull/4228)
* Fix fractional zoom calculation (by [@hyperknot](https://github.com/hyperknot)) [#4224](https://github.com/Leaflet/Leaflet/pull/4224)
* Better cleanup of L.Control.Layers, fixes [#4213](https://github.com/Leaflet/Leaflet/pull/4213) (plus unit tests) (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4214](https://github.com/Leaflet/Leaflet/pull/4214)
* Fixed transform issue when not `L.Browser.any3d` (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4212](https://github.com/Leaflet/Leaflet/pull/4212)
* Fixed fractional zoom controls broken when initial zoom isn't specified (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4209](https://github.com/Leaflet/Leaflet/pull/4209)
* Fix extra tiles usage (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4193](https://github.com/Leaflet/Leaflet/pull/4193)
* Sanity check: test `pxBounds` validity before using it (by [@yohanboniface](https://github.com/yohanboniface)) [#4191](https://github.com/Leaflet/Leaflet/pull/4191)
* Disable event defaults when disabling scroll propagation (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4160](https://github.com/Leaflet/Leaflet/pull/4160)
* Fixed precision issues in `L.Circle` radius (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4133](https://github.com/Leaflet/Leaflet/pull/4133)
* Workarounded some touch-capable browsers firing `dblclick` instead of touch events (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4131](https://github.com/Leaflet/Leaflet/pull/4131)
* Use all projected coords when calculating `L.Polyline`'s pixel bounds. (by [@perliedman](https://github.com/perliedman)) [#4114](https://github.com/Leaflet/Leaflet/pull/4114)
* Fixed removing all events when passing an `undefined` property (by [@robertleeplummerjr](https://github.com/robertleeplummerjr)) [#4113](https://github.com/Leaflet/Leaflet/pull/4113)
* Fixed retina URL computation (by [@hyperknot](https://github.com/hyperknot)) [#4110](https://github.com/Leaflet/Leaflet/pull/4110)
* Fire `tileunload` for all unloading of tiles (by [@tcoats](https://github.com/tcoats)) [#4099](https://github.com/Leaflet/Leaflet/pull/4099)
* Fixed duplicated code in `L.GridLayer.retainParent()` (by [@jblarsen](https://github.com/jblarsen)) [#4094](https://github.com/Leaflet/Leaflet/pull/4094)
* Make sure to always reset `_enforcingBounds`. (by [@perliedman](https://github.com/perliedman)) [#4089](https://github.com/Leaflet/Leaflet/pull/4089)
* Fix bug with max bounds and custom projections (by [@OleLaursen](https://github.com/OleLaursen)) [#4078](https://github.com/Leaflet/Leaflet/pull/4078)
* When limiting center to bounds, ignore offsets less than a pixel. (by [@perliedman](https://github.com/perliedman)) [#4077](https://github.com/Leaflet/Leaflet/pull/4077)
* Fixed bug for hover event between circle overlapping polygon on canvas (by [@fimietta](https://github.com/fimietta)) [#4072](https://github.com/Leaflet/Leaflet/pull/4072)
* Fixed but where `L.Control.Layers` where calling `map._size` instead of `getSize()` (by [@Brobin](https://github.com/Brobin)) [#4063](https://github.com/Leaflet/Leaflet/pull/4063)
* Round new map position before animating pan (by [@RLRR](https://github.com/RLRR)) [#4046](https://github.com/Leaflet/Leaflet/pull/4046)
* Fixed overlayed circles not responding to mouse events in canvas (by [@Deftwun](https://github.com/Deftwun)) [#4033](https://github.com/Leaflet/Leaflet/pull/4033)
* Fixed GeoJSON `resetStyle` (by [@yohanboniface](https://github.com/yohanboniface)) [#4028](https://github.com/Leaflet/Leaflet/pull/4028)
* Fixed popup toggle on marker click (by [@yohanboniface](https://github.com/yohanboniface)) [#4016](https://github.com/Leaflet/Leaflet/pull/4016)
* Fixed event target fallbacking to map after marker drag (fix [#3971](https://github.com/Leaflet/Leaflet/pull/3971)) (by [@yohanboniface](https://github.com/yohanboniface)) [#4010](https://github.com/Leaflet/Leaflet/pull/4010)
* Fixed `maxZoom` not honoring 0 (by [@simsibimsiwimsi](https://github.com/simsibimsiwimsi)) [#4000](https://github.com/Leaflet/Leaflet/pull/4000)
* Skip `L.GridLayer._updateLevels()` when out of min/max zoom (prevents IE8 exceptions) (by [@IvanSanchez](https://github.com/IvanSanchez)) [#3999](https://github.com/Leaflet/Leaflet/pull/3999)
* `L.DomUtil.getPosition()` should return a fallback value (for VML in IE8) (by [@IvanSanchez](https://github.com/IvanSanchez)) [#3998](https://github.com/Leaflet/Leaflet/pull/3998)
* `L.Marker`: init interaction regardless of new icon or not (by [@celadevra](https://github.com/celadevra)) [#3978](https://github.com/Leaflet/Leaflet/pull/3978)
* Fix `interactive=false` not taken into account for canvas (by [@yohanboniface](https://github.com/yohanboniface)) [#3956](https://github.com/Leaflet/Leaflet/pull/3956)
* Fix canvas path disappearing on animation (by [@klaftertief](https://github.com/klaftertief)) [#3950](https://github.com/Leaflet/Leaflet/pull/3950)
* Only check for moving draggable in canvas renderer when map is draggable (by [@klaftertief](https://github.com/klaftertief)) [#3942](https://github.com/Leaflet/Leaflet/pull/3942)
* Fix SVG Dragging issues in IE and Edge (by [@perliedman](https://github.com/perliedman)) [#4382](https://github.com/Leaflet/Leaflet/pull/4382)
* Fix click not working on inputs in controls in IE 11 (by [@perliedman](https://github.com/perliedman)) [#4371](https://github.com/Leaflet/Leaflet/pull/4371)
* Make drag and touch zoom handlers insensitive to order of event handlers (by [@perliedman](https://github.com/perliedman)) [#4387](https://github.com/Leaflet/Leaflet/pull/4387)

### Other
* Added a Code of Conduct (by [@mourner](https://github.com/mourner)) [#4142](https://github.com/Leaflet/Leaflet/pull/4142)
* Dual 1.0 & 0.7 docs to gh-pages (by [@IvanSanchez](https://github.com/IvanSanchez)) [#4085](https://github.com/Leaflet/Leaflet/pull/4085)
* 🍂doc (by [@IvanSanchez](https://github.com/IvanSanchez)) [#3916](https://github.com/Leaflet/Leaflet/pull/3916)
* A lot of documentation improvements (by [@nathancahill](https://github.com/nathancahill)) [#4418](https://github.com/Leaflet/Leaflet/pull/4418), [#4419](https://github.com/Leaflet/Leaflet/pull/4419), [#4423](https://github.com/Leaflet/Leaflet/pull/4423), [#4425](https://github.com/Leaflet/Leaflet/pull/4425) and [a lot more](https://github.com/Leaflet/Leaflet/pulls?q=is%3Apr+author%3Anathancahill+is%3Aclosed)
* Replace links to google groups with ones to GIS StackExchange (by [@IvanSanchez](https://github.com/IvanSanchez)) [#3886](https://github.com/Leaflet/Leaflet/pull/3886)


## 1.0-beta2 (October 14, 2015)

Beta 2 fixes over 50 bugs that were reported by users trying out beta 1. The vast majority of changes are small fixes to problems that are triggered in very specific situations or conditions, a few API consolidation changes, and a few browser workarounds.

### API changes

* `L.circle` now accepts `radius` as an option (like `L.circleMarker`) rather than a second argument (by [@IvanSanchez](https://github.com/IvanSanchez))

### Improvements

* Implemented canvas optimizations on mousehover interactions (by [@philippelatulippe](https://github.com/philippelatulippe)) [#3076](https://github.com/Leaflet/Leaflet/issues/3076)
* Improved drag behaviour by preventing a `preclick` event during drag (by [@yohanboniface](https://github.com/yohanboniface)) [#3632](https://github.com/Leaflet/Leaflet/issues/3632)
* Implemented `L.ImageOverlay.setBounds()` and fixed image overlay initialization (by [@fminuti](https://github.com/fminuti)) [#3680](https://github.com/Leaflet/Leaflet/pull/3680)
* Implemented draggable items to fire `mousedown` events (by [@yohanboniface](https://github.com/yohanboniface)) [#3682](https://github.com/Leaflet/Leaflet/pull/3682)
* Changed detection of browsers capable of `msPointer` events (by [@IvanSanchez](https://github.com/IvanSanchez)) [#3684](https://github.com/Leaflet/Leaflet/pull/3684)
* Implemented latitude truncation for spherical mercator projection (by [@perliedman](https://github.com/perliedman)) [#3700](https://github.com/Leaflet/Leaflet/issues/3700)
* Armored against browsers not implementing `Geolocation.clearWatch()` [#3707](https://github.com/Leaflet/Leaflet/issues/3707)
* Implemented generation of sourcemaps when building and minifying source files (by [@IvanSanchez](https://github.com/IvanSanchez)) [#3723](https://github.com/Leaflet/Leaflet/pull/3723)
* Added `bringToFront` and `bringToBack` to popups (by [@danzel](https://github.com/danzel)). [#3908](https://github.com/Leaflet/Leaflet/pull/3908) [#3307](https://github.com/Leaflet/Leaflet/issues/3813)
* Multiply offset by 3 on keyboard pan when shift key is pressed (by [@yohanboniface](https://github.com/yohanboniface)) [#3921](https://github.com/Leaflet/Leaflet/pull/3921)

### Bug fixes

* Fixed event propagation on double finger tap (by [@IvanSanchez](https://github.com/IvanSanchez)) [#3532](https://github.com/Leaflet/Leaflet/issues/3532)
* Fixed style changes on re-added layers (by [@wpf500](https://github.com/wpf500)) [#3547](https://github.com/Leaflet/Leaflet/pull/3547)
* Fixed `preventOutline` exceptions [#3625](https://github.com/Leaflet/Leaflet/issues/3625)
* Fixed a box zoom regression bug [#3633](https://github.com/Leaflet/Leaflet/issues/3633)
* Fixed `contextmenu` behaviour when there are no event listeners (by [@yohanboniface](https://github.com/yohanboniface)) [#3638](https://github.com/Leaflet/Leaflet/issues/3638)
* Fixed map controls not showing on top of map layers (by [@patrickarlt](https://github.com/patrickarlt)) [#3644](https://github.com/Leaflet/Leaflet/pull/3644)
* Fixed display of marker images with `max-width` (by [@davidjb](https://github.com/davidjb)) [#3647](https://github.com/Leaflet/Leaflet/pull/3647)
* Fixed `mouseout` and `mouseover` event bubbling (by [@yohanboniface](https://github.com/yohanboniface)) [#3648](https://github.com/Leaflet/Leaflet/issues/3648) [#3797](https://github.com/Leaflet/Leaflet/issues/3797) [#3708](https://github.com/Leaflet/Leaflet/issues/3708)
* Fixed a layer control bug when removing layers (by [@davidlukerice](https://github.com/davidlukerice)) [#3651](https://github.com/Leaflet/Leaflet/pull/3651)
* Fixed pan and zoom animations interacting with each other [#3355](https://github.com/Leaflet/Leaflet/issues/3355) [#3655](https://github.com/Leaflet/Leaflet/issues/3655)
* Fixed a regression bug in canvas renderer when removing layers [#3661](https://github.com/Leaflet/Leaflet/issues/3661)
* Remove a workaround for legacy Android 2 browsers [#2282](https://github.com/Leaflet/Leaflet/issues/2282)
* Fixed VML vector rendering in IE8 when removing and re-adding layers (by [@fminuti](https://github.com/fminuti)) [#2809](https://github.com/Leaflet/Leaflet/issues/2809)
* Fixed `flyTo` animations when the map center doesn't change (by [@fminuti](https://github.com/fminuti)) [#3663](https://github.com/Leaflet/Leaflet/pull/3663)
* Fixed fade animations for semitransparent tile layers (by [@w8r](https://github.com/w8r)) [#3671](https://github.com/Leaflet/Leaflet/pull/3671)
* Fixed behaviour of the `baselayerchange` event (by [@yohanboniface](https://github.com/yohanboniface)) [#3677](https://github.com/Leaflet/Leaflet/issues/3677)
* Fixed marker icon handling during a marker drag (by [@IvanSanchez](https://github.com/IvanSanchez)) [#3687](https://github.com/Leaflet/Leaflet/issues/3687)
* Fixed a IE 11 map container visibility bug (by [@fminuti](https://github.com/fminuti)) [#2788](https://github.com/Leaflet/Leaflet/issues/2788)
* Prevented dragging interactions while a map zoom animation is running (by [@IvanSanchez](https://github.com/IvanSanchez)) [#3692](https://github.com/Leaflet/Leaflet/issues/3692)
* Implement disabling layers in the layer control when they are unavailable at the current zoom level (by [@IvanSanchez](https://github.com/IvanSanchez)) [#252](https://github.com/Leaflet/Leaflet/issues/252)
* Refactored `L.Util.requestAnimFrame` definition (by [@fminuti](https://github.com/fminuti)) [#3703](https://github.com/Leaflet/Leaflet/issues/3703)
* Fixed an edge case of `L.Circle.getBounds()` (by [@knabar](https://github.com/knabar)) [#3776](https://github.com/Leaflet/Leaflet/pull/3776)
* Fixed `Rectangle.setBounds()` return value (by [@IvanSanchez](https://github.com/IvanSanchez)) https://github.com/Leaflet/Leaflet/commit/e698f641afadd4a0b412a6c9e065a6dbfbe16f44
* Fixed event firing order when opening a popup (by [@yohanboniface](https://github.com/yohanboniface)) [#3745](https://github.com/Leaflet/Leaflet/issues/3745)
* Fixed tile layer loading when dragging then immediately pinch-zooming the map (by [@IvanSanchez](https://github.com/IvanSanchez)) [#3814](https://github.com/Leaflet/Leaflet/issues/3814)
* Work around browser limitations when panning the map too far away (by [@yohanboniface](https://github.com/yohanboniface) and [@IvanSanchez](https://github.com/IvanSanchez)) [#3608](https://github.com/Leaflet/Leaflet/issues/3608)
* Fixed popup text selection and touch events for IE 10 (by [@danzel](https://github.com/danzel)) [#3804](https://github.com/Leaflet/Leaflet/issues/3804)
* Fixed tile layer ordering when `maxZoom` is set (by [@patrickarlt](https://github.com/patrickarlt)) [#3721](https://github.com/Leaflet/Leaflet/issues/3721)
* Fixed scale behaviour on non-standard CRSs (by [@javimolla](https://github.com/patrickarlt), special thanks to [Your First PR](https://yourfirstpr.github.io/)) [#2990](https://github.com/Leaflet/Leaflet/issues/2990)
* Fixed rendering of off-screen vector layers (by [@yohanboniface](https://github.com/yohanboniface)) [#3836](https://github.com/Leaflet/Leaflet/issues/3836)
* Fixed rendering of intersecting vector layers (by [@yohanboniface](https://github.com/yohanboniface)) [#3583](https://github.com/Leaflet/Leaflet/issues/3583)
* Enforced stricter code linting
* Fixed disabled drag handlers not being able to be re-enabled (by [@yohanboniface](https://github.com/yohanboniface)) [#3825](https://github.com/Leaflet/Leaflet/issues/3825)
* Fixed panning outside the map bounds (by [@yohanboniface](https://github.com/yohanboniface)) [#3878](https://github.com/Leaflet/Leaflet/issues/3878)
* Worked around IE 11 not focusing the map using keyboard (by [@IvanSanchez](https://github.com/IvanSanchez)) [#3772](https://github.com/Leaflet/Leaflet/issues/3772)
* Fixed vector layer positioning during a zoom animation in low zoom (by [@IvanSanchez](https://github.com/IvanSanchez)) [#3769](https://github.com/Leaflet/Leaflet/issues/3769)
* Implemented `noWrap` option in `L.GridLayer` (by [@IvanSanchez](https://github.com/IvanSanchez)) [#3691](https://github.com/Leaflet/Leaflet/issues/3691)
* Fixed popups panning the map while running another pan animation (by [@yohanboniface](https://github.com/yohanboniface)) [#3744](https://github.com/Leaflet/Leaflet/issues/3744)
* Fixed uncorrect length of scale control due to CSS styles (by [@yohanboniface](https://github.com/yohanboniface)) [#3668](https://github.com/Leaflet/Leaflet/issues/3668)
* Fixed detection of default image path for icons (by [@ilfa](https://github.com/ilfa)) [#3770](https://github.com/Leaflet/Leaflet/pull/3770)
* Various Canvas events fixes (by [@yohanboniface](https://github.com/yohanboniface)) [#3917](https://github.com/Leaflet/Leaflet/pull/3917)
* Fix touch scroll in layers control (by [@yohanboniface](https://github.com/yohanboniface)) [#2882](https://github.com/Leaflet/Leaflet/issues/2882)
* Fix duration not passed through from setView to panBy (by [@yohanboniface](https://github.com/yohanboniface)) [#3300](https://github.com/Leaflet/Leaflet/issues/3300)


## 1.0-beta1 (July 14, 2015)

The first beta of the huge, long-awaited Leaflet 1.0 release.

This version contains a lot of beneficial but potentially breaking changes (especially if you're a plugin author), so please read through the changes carefully if your code breaks after upgrading.

### Vectors API improvements

Leaflet vector layers rendering got a major rewrite, making it possible to switch between rendering backends (Canvas, SVG) dynamically (and even use both for different layers at the same time), have more than one physical pane for vector layers, significantly improving performance, adding Canvas retina support, getting rid of ugly hacks and generally making the code much cleaner. Main PR [#2290](https://github.com/Leaflet/Leaflet/pull/2290).

* Added `Renderer` layer (inherited by SVG/Canvas implementations) that handles renderer bounds and zoom animation.
* Added `SVG` & `Canvas` classes that now contain all renderer-specific code for vector layers and can be added as layers to the map.
* All vector layer classes (`Path`, `Polyline`, etc.) now don't contain any renderer-specific code and instead can be passed a renderer layer to use as `renderer` in options;
* Removed `MultiPolyline` and `MultiPolygon` classes since multiple rings are now handled by `Polyline` and `Polygon` classes respectively. Layers with multiple rings now perform much better (since each is now physically a single path object instead of being a `FeatureGroup` of layers).
* **Dramatically improved performance of interactive Canvas layers**. Mouse events work much faster (due to improved hit detection algorithms), and layers get updated many times faster (with partial redraws instead of redrawing the whole Canvas).
* **Dramatically improved performance of interactive SVG layers** (e.g. creating a big GeoJSON layer and adding to a map got 3x faster while taking 2.5x less memory). [#2240](https://github.com/Leaflet/Leaflet/issues/2240) [#2315](https://github.com/Leaflet/Leaflet/issues/2315)
* Added retina support for Canvas layers.
* Improved default vector layer styles.
* Added `Polyline` and `Polygon` `getCenter` for getting centroids.
* Respectively, improved `Polyline` and `Polygon` popup positioning when calling `openPopup`.
* Improved `Polyline`/`Polygon` `getBounds` to be cached (so it works much faster).
* Changed `Circle` to inherit from `CircleMarker` and not the other way.
* Fixed `GeoJSON` `resetStyle` to work properly in case `style` option wasn't set.
* Fixed a bug where map fired `moveend` when updating Canvas layers.
* Removed `Polyline` and `Polygon` `spliceLatLngs` method (just use `setLatLngs` instead).
* Changed `Polygon` `getLatLngs` to always return an array of rings (nested array) (by [@yohanboniface](https://github.com/yohanboniface)). [#2618](https://github.com/Leaflet/Leaflet/issues/2618) [#3386](https://github.com/Leaflet/Leaflet/pull/3386) [Leaflet/Leaflet#3279](https://github.com/Leaflet/Leaflet/pull/3279) [#2648](https://github.com/Leaflet/Leaflet/issues/2648)
* Added the ability to specify a custom pane for vector layers (making it possible to easily do stacks like vectors-tiles-vectors with proper z-index order) (by [@Jakobud](https://github.com/Jakobud)). [#3266](https://github.com/Leaflet/Leaflet/pull/3266) [#2786](https://github.com/Leaflet/Leaflet/pull/2786)
* Added vector layers `fillRule` option (by [@bullgare](https://github.com/bullgare)). [#2834](https://github.com/Leaflet/Leaflet/pull/2834)
* Removed `L_PREFER_CANVAS` global switch and added `Map` `preferCanvas` option instead (by [@yohanboniface](https://github.com/yohanboniface)). [#3623](https://github.com/Leaflet/Leaflet/pull/3623)

### Layers API improvements

All Leaflet layers (including markers, popups, tile and vector layers) have been refactored to have a common parent, `Layer` class, that shares the basic logic of adding and removing. The leads to the following changes (main PR [#2266](https://github.com/Leaflet/Leaflet/pull/2266)):

* Added `Layer` class which all layers added to a map should inherit from.
* Added `add` and `remove` events to all layers.
* Added `remove` method to layers and controls (`marker.remove()` is now equivalent to `map.removeLayer(marker)`).
* Improved performance of adding and removing layers.
* Added `pane` option to all layers that can be changed (e.g. you can set `pane: 'overlayPane'` to a tile layer).
* Added `map` `createPane` method for custom panes. [#1742](https://github.com/Leaflet/Leaflet/issues/1742)
* Simplified map panes &mdash; removed `objectsPane`, all panes are on the same level now.
* Added `shadowPane` option to markers as well.
* Added `getEvents` method to all layers that returns an `{event: listener, ...}` hash; layers now manage its listeners automatically without having to do this in `onAdd`/`onRemove`.
* Added `togglePopup`, `setPopupContent`, `getPopup`, `isPopupOpen` methods to all layers. [#2279](https://github.com/Leaflet/Leaflet/issues/2279) [#2292](https://github.com/Leaflet/Leaflet/issues/2292)
* Improved performance of adding/removing layers with layers control present (instead of listening to any layer add/remove, the control only listens to layers added in configuration).
* Fixed `FeatureGroup` `getBounds` to work correctly when containing circle markers.
* Removed `Map` `tilelayersload` event.
* Removed `Popup` `open` and `close` events in favor of `add` and `remove` for consistency.
* Moved all layer-related logic in `Map.js` to `Layer.js`.
* Improved `FeatureGroup` `bindPopup` to accept a function for generating popup content, significantly improving memory footprint when adding popups to a huge number of layers (by [@patrickarlt](https://github.com/patrickarlt)). [#3109](https://github.com/Leaflet/Leaflet/pull/3109) [#3059](https://github.com/Leaflet/Leaflet/pull/3059)
* Added `ImageOverlay` interactivity (mouse events, etc.) (by [@snkashis](https://github.com/snkashis)). [#3009](https://github.com/Leaflet/Leaflet/pull/3009) [#1727](https://github.com/Leaflet/Leaflet/issues/1727)
* Added `ImageOverlay` `getBounds` (by [@brunob](https://github.com/brunob)). [#2848](https://github.com/Leaflet/Leaflet/pull/2848)
* Renamed `clickable` option to `interactive` (by [@AndriiHeonia](https://github.com/AndriiHeonia)). [#2838](https://github.com/Leaflet/Leaflet/pull/2838) [#2499](https://github.com/Leaflet/Leaflet/issues/2499)
* Changed the default z-index of panes to be bigger, leaving more room for customization (by [@patrickarlt](https://github.com/patrickarlt)). [#3591](https://github.com/Leaflet/Leaflet/pull/3591)
* Improved DOM event bubbling mechanism for layers (by [@yohanboniface](https://github.com/yohanboniface)). [Leaflet/Leaflet#3307](https://github.com/Leaflet/Leaflet/pull/3307) [#3450](https://github.com/Leaflet/Leaflet/pull/3450) [#3307](https://github.com/Leaflet/Leaflet/pull/3307)
* Added `nonBubblingEvents` option to layers (by [@yohanboniface](https://github.com/yohanboniface)). [#3605](https://github.com/Leaflet/Leaflet/pull/3605) [#3307](https://github.com/Leaflet/Leaflet/pull/3307) [#3604](https://github.com/Leaflet/Leaflet/issues/3604)

In addition, layer events implementation was rewritten to use **event delegation**, significantly improving add/remove performance and memory footprint. [#3032](https://github.com/Leaflet/Leaflet/pull/3032) [#46](https://github.com/Leaflet/Leaflet/issues/46)

### TileLayer & Projections API improvements

TileLayer code and everything projections-related has undergone a major refactoring, documented in PR [#2247](https://github.com/Leaflet/Leaflet/pull/2247). It includes the following changes (in addition to much cleaner and simpler code):

#### TileLayer API improvements

These changes make implementing custom grid-like layers for Leaflet much easier.

* Moved most of the `TileLayer` logic into the new `GridLayer` class (which `TileLayer` now inherits, extending it with logic specific to tile servers).
* Removed `TileLayer.Canvas` in favor of the much more flexible and powerful `GridLayer`.
* Improved tile wrapping and bounding logic in `TileLayer` to work transparently and completely depent on the CRS used; removed the need for `TileLayer` hacks when using custom projections.
* Added non-square tiles support (by [@IvanSanchez](https://github.com/IvanSanchez)). [#3573](https://github.com/Leaflet/Leaflet/pull/3573) [#3570](https://github.com/Leaflet/Leaflet/issues/3570)
* Removed `url` property in `tileload` and `tileloadstart` events (get it through `tile.src`).

#### Projections API improvements

These changes were targeted at removing any hardcoded projection-specific logic accross Leaflet classes, making it transparent and driven by the chosen CRS. They make using Leaflet with custom projections (including flat maps) much easier, and remove the need for ugly hacks in the [Proj4Leaflet](https://github.com/kartena/Proj4Leaflet) plugin.

* Added `CRS.Earth` which serves as a base for all Earth-based CRS (`EPSG3857` etc.). [#2345](https://github.com/Leaflet/Leaflet/pull/2345)
* Added `Projection` `bounds` property that defines bounds for different projections (`Mercator`, etc.) in projected coordinates (by [@perliedman](https://github.com/perliedman)).
* Added `CRS` `wrapLat` and `wrapLng` properties which define whether the world wraps on a given axis and in what range. Set as `[-180, 180]` for `EPSG:3857`, `EPSG:4326`, `EPSG:3395` by default.
* Added `CRS` and `Map` `wrapLatLng` (the latter depends on the chosen CRS).
* Added `CRS` `infinite` property that disables boundaries (the world can go on infinitely in any direction), default for `CRS.Simple`.
* Added `CRS` `getProjectedBounds` and `Map` `getPixelWorldBounds` methods that returns world bounds in projected coordinates depending on zoom (derived from `Projection` `bounds`) (by [@perliedman](https://github.com/perliedman)).
* Added `CRS` `unproject` method that converts coordinates in CRS-dependent units into `LatLng` coordinates (by [@sowelie](https://github.com/sowelie)).
* Added `Map` `distance(latlng1, latlng2)` method that takes CRS into account and works with flat projections. [#2345](https://github.com/Leaflet/Leaflet/pull/2345) [#1442](https://github.com/Leaflet/Leaflet/issues/1442)
* Improved `Circle` to be approximated with an ellipse in Earth-based projections. [#2345](https://github.com/Leaflet/Leaflet/pull/2345)
* Fixed `EPSG:4326` to have correct tile pyramid (2x1 tiles at root).
* Fixed `Projection.SphericalMercator` to project to meter units (by [@calvinmetcalf](https://github.com/calvinmetcalf)).
* Fixed `Map` `worldCopyJump` option to work for other projections.
* Fixed `Circle` to work with flat projections. [#2345](https://github.com/Leaflet/Leaflet/pull/2345) [#1465](https://github.com/Leaflet/Leaflet/issues/1465)
* Fixed scale control precision in non-EPSG:3857 projections. [#2345](https://github.com/Leaflet/Leaflet/pull/2345)
* Fixed `ImageOverlay` not working properly in some non-standard projections. [#3011](https://github.com/Leaflet/Leaflet/issues/3011)


### Animations improvements and fractional zoom

Animation code in Leaflet had undergone a major rewrite (main PR: [#2382](https://github.com/Leaflet/Leaflet/pull/2382)), bringing improvements such as:

- Multi-level tile buffering for more seamless zooming experience with less flickering
- Optimal path animation (`map.flyTo`) for zooming to a particular place in a curve (simultaneously zooming and panning)
- Fractional zoom support &mdash; now you can do things like `map.setZoom(12.45)` and it just works.
- Layers now rely on `zoom` event in addition to `viewreset` for frame-by-frame zoom animations. [#3278](https://github.com/Leaflet/Leaflet/pull/3278)

### UX improvements

* Improved panning inertia behavior so that there are no tearing during animation when panning around quickly. [#2360](https://github.com/Leaflet/Leaflet/issues/2360)
* Improved inertial scrolling to have a nicer, more natural feel (by [@RickMohr](https://github.com/RickMohr)). [Leaflet/Leaflet#3063](https://github.com/Leaflet/Leaflet/pull/3063) [#3063](https://github.com/Leaflet/Leaflet/pull/3063) [#3062](https://github.com/Leaflet/Leaflet/issues/3062) [#2987](https://github.com/Leaflet/Leaflet/issues/2987)
* Added popup fade out animation.
* Improved keyboard support to ignore keystrokes with modifier keys (Ctrl, Alt, Meta) to not interfere with OS shortcuts.
* Made popup to close when pressing Escape (by [@snkashis](https://github.com/snkashis)). [#951](https://github.com/Leaflet/Leaflet/issues/951) [#3000](https://github.com/Leaflet/Leaflet/pull/3000)
* Improved keyboard zoom to zoom by 3 levels if shift key is pressed (by [@yohanboniface](https://github.com/yohanboniface)). [#3024](https://github.com/Leaflet/Leaflet/pull/3024)
* Improved layers control to become scrollable when there are too many layers (by [@rowanwins](https://github.com/rowanwins)). [#3571](https://github.com/Leaflet/Leaflet/pull/3571) [#3167](https://github.com/Leaflet/Leaflet/issues/3167)

### Misc. performance improvements

* Significantly [improved](http://jsperf.com/leaflet-parsefloat-in-latlng/2) `LatLng` creation performance (8x).
* Improved performance of layer objects construction.
* Significantly improved `FeatureGroup` (and correspondingly `GeoJSON`) layer adding and events performance (about 10x) by implementing a much better event propagation mechanism. [#2311](https://github.com/Leaflet/Leaflet/pull/2311)
* Improved Leaflet events and DOM events memory footprint.
* Improved `Evented` `off` performance by about 2 times.

### Other breaking API changes

* Changed `DomUtil` `off` to require `context` attribute if you remove a listener that was previously added with a particular context.
* Removed `DomUtil.getViewportOffset` method as it is no longer necessary.
* Removed `DomUtil` `getTranslateString` and `getScaleString` methods.
* Removed `DomUtil` `documentIsLtr` method.
* Removed `LatLng` `RAD_TO_DEG`, `DEG_TO_RAD` and `MAX_MARGIN` constants.
* Renamed `Util.limitExecByInterval` to `Util.throttle`.

### Other API improvements

* Added `Evented` class that now many Leaflet classes inherit from (instead of mixing in events methods in each class), while keeping the old `includes: L.Mixin.Events` syntax available. [#2310](https://github.com/Leaflet/Leaflet/pull/2310)
* Improved `Class` `options` to be prototypically inherited instead of copied over in children classes, which leads to more efficient memory use, faster object construction times and ability to change parent options that get propagated to all children automatically (by [@jfirebaugh](https://github.com/jfirebaugh)). [#2300](https://github.com/Leaflet/Leaflet/pull/2300) [#2294](https://github.com/Leaflet/Leaflet/issues/2294)
* Added `{r}` variable to `TileLayer` `url` for adding `"@2x"` prefix on Retina-enabled devices (by [@urbaniak](https://github.com/urbaniak)). [#2296](https://github.com/Leaflet/Leaflet/pull/2296)
* Added `Point` `ceil` method (by [@perliedman](https://github.com/perliedman)).
* Added `Util.wrapNum` method for wrapping a number to lie in a certain range.
* Improved `L.bind` to use native `Function` `bind` on modern browsers and prepend real arguments to bound ones.
* Added `LatLng` `equals` second argument `maxMargin`.
* Added `DomUtil` `setClass` and `getClass` methods.
* Improved `Marker` `move` event to include `oldLatlng` (by [@danzel](https://github.com/danzel)). [#2412](https://github.com/Leaflet/Leaflet/pull/2412)
* Added `Marker` `mousemove` event (by [@bullgare](https://github.com/bullgare)). [#2798](https://github.com/Leaflet/Leaflet/pull/2798)
* Improved `DomEvent` `on`/`off` to accept space-separated events and object literals (`{type: fn}`).
* Added `DomUtil` `toFront` and `toBack` methods.
* Added `Evented` `listens` as a shortcut to `hasEventListeners`.
* Added optional support for center-oriented scroll for `L.map` option `touchZoom` (by [@mtmail](https://github.com/mtmail)). [#2527](https://github.com/Leaflet/Leaflet/pull/2527)
* Added `getElement` method to all layers that returns an associated DOM element.
* Added `LatLng` `clone` method (by [@yohanboniface](https://github.com/yohanboniface)). [#3390](https://github.com/Leaflet/Leaflet/pull/3390)
* Added `Map` `setMinZoom` and `setMaxZoom` methods (by [@nathancahill](https://github.com/nathancahill)). [#3383](https://github.com/Leaflet/Leaflet/pull/3383) [#3380](https://github.com/Leaflet/Leaflet/issues/3380)
* Added `originalEvent` to `Map` and `Marker` `drag` and `move` event data (by [@yohanboniface](https://github.com/yohanboniface)). [#3264](https://github.com/Leaflet/Leaflet/pull/3264)
* Added `Popup` `autoClose` option (by [@jfirebaugh](https://github.com/jfirebaugh)). [#3018](https://github.com/Leaflet/Leaflet/pull/3018) [#2716](https://github.com/Leaflet/Leaflet/issues/2716) [#1853](https://github.com/Leaflet/Leaflet/issues/1853)
* Added `Control.Zoom` `enable` and `disable` methods. [#3172](https://github.com/Leaflet/Leaflet/issues/3172)
* Added an argument to `L.PolyUtil.clipPolygon` that controls rounding (by [@aparshin](https://github.com/aparshin)). [#2926](https://github.com/Leaflet/Leaflet/pull/2926) [#2917](https://github.com/Leaflet/Leaflet/issues/2917)
* Added `Map` `wheelDebounceTime` option (by [@AndriiHeonia](https://github.com/AndriiHeonia)). [#2836](https://github.com/Leaflet/Leaflet/pull/2836) [#2501](https://github.com/Leaflet/Leaflet/issues/2501)
* Added `TileLayer.WMS` `uppercase` option (now `false` by default) (by [@kdeloach](https://github.com/kdeloach)). [#2831](https://github.com/Leaflet/Leaflet/pull/2831) [#1751](https://github.com/Leaflet/Leaflet/issues/1751)
* Added `ImageOverlay` `alt` option (by [@francis-liberty](https://github.com/francis-liberty)). [#2767](https://github.com/Leaflet/Leaflet/pull/2767) [#2564](https://github.com/Leaflet/Leaflet/issues/2564)
* Improved `L.Util.extend` performance (by [@fab1an](https://github.com/fab1an)). [#2746](https://github.com/Leaflet/Leaflet/pull/2746)
* Added `Map` `stop` method for stopping panning or `flyTo` animation.
* Added `Map` `maxBoundsViscosity` option that controls how much the map resits dragging out of max bounds (set to `1` for a hard limit) (by [@IvanSanchez](https://github.com/IvanSanchez)). [#2224](https://github.com/Leaflet/Leaflet/pull/2224) [#3510](https://github.com/Leaflet/Leaflet/pull/3510) [#1673](https://github.com/Leaflet/Leaflet/issues/1673)
* Added `Bounds` and `LatLngBounds` `overlaps` method (by [@IvanSanchez](https://github.com/IvanSanchez)). [#2981](https://github.com/Leaflet/Leaflet/issues/2981) [#3508](https://github.com/Leaflet/Leaflet/pull/3508)
* Added `ImageOverlay` `crossOrigin` option (by [@patrickarlt](https://github.com/patrickarlt)). [#3594](https://github.com/Leaflet/Leaflet/pull/3594) [#2621](https://github.com/Leaflet/Leaflet/pull/2621)

### Bugfixes

* Fixed `DomUtil` `on` to make it possible to add the same listener to the same element for multiple contexts.
* Fixed a bug that thowed an error when attempting to reinitialize the map on unload (by [@gamb](https://github.com/gamb)). [#2410](https://github.com/Leaflet/Leaflet/pull/2410)
* Fixed excessively blurry non-retina tiles on retina iOS devices.
* Fixed a bug with popup close button in IE7/8. [#2351](https://github.com/Leaflet/Leaflet/issues/2351)
* Fixed `ImageOverlay` mercator distortion on lower zoom levels.
* Fixed a bug where layers didn't fire `popupopen` and `popupclose` events when manually creating a popup object and passing it to `bindPopup`. [#2354](https://github.com/Leaflet/Leaflet/issues/2354)
* Fixed box-zoom overlay appearing under markers. [#1813](https://github.com/Leaflet/Leaflet/issues/1813)
* Fixed `Map` `panInsideBounds` to accept array-form bounds (by [@RLRR](https://github.com/RLRR)). [#3489](https://github.com/Leaflet/Leaflet/pull/3489)
* Fixed marker draggable state to persist when removing and adding back to the map (by [@IvanSanchez](https://github.com/IvanSanchez)). [#3488](https://github.com/Leaflet/Leaflet/pull/3488)
* Fixed inertia not working when parallel to axis (by [@rikvanmechelen](https://github.com/rikvanmechelen)). [#3432](https://github.com/Leaflet/Leaflet/issues/3432)
* Fixed images and SVG inside popups having max-width property overriden (by [@yohanboniface](https://github.com/yohanboniface)). [#3452](https://github.com/Leaflet/Leaflet/pull/3452)
* Fixed cursors when dragging is disabled (by [@juliensoret](https://github.com/juliensoret)). [#3219](https://github.com/Leaflet/Leaflet/issues/3219) [#3233](https://github.com/Leaflet/Leaflet/pull/3233)
* Fixed `LatLng` `wrap` to not drop altitude (by [@IvanSanchez](https://github.com/IvanSanchez)). [#3420](https://github.com/Leaflet/Leaflet/issues/3420)
* Fixed Firefox for Android not being detected as mobile (by [@IvanSanchez](https://github.com/IvanSanchez)). [#3419](https://github.com/Leaflet/Leaflet/pull/3419)
* Fixed an infinite loop when calling `setMaxBounds` several times in a row (by [@IvanSanchez](https://github.com/IvanSanchez)). [#3410](https://github.com/Leaflet/Leaflet/pull/3410) [#3320](https://github.com/Leaflet/Leaflet/issues/3320)
* Fixed a WTF `Map` `locate` bug that could cause some unexpected effects (by [@sindre](https://github.com/sindre)). [Leaflet/Leaflet#3404](https://github.com/Leaflet/Leaflet/issues/3404)
* Fixed broken zoom in Project Spartan browsers (by [@mitchless](https://github.com/mitchless)). [#3379](https://github.com/Leaflet/Leaflet/pull/3379)
* Fixed broken `Polygon` `getCenter` when all points <area></area> in the same pixel (by [@yohanboniface](https://github.com/yohanboniface)). [#3372](https://github.com/Leaflet/Leaflet/pull/3372)
* Fixed broken `Polyline` `getCenter` when the line is very small (by [@yohanboniface](https://github.com/yohanboniface)). [#3371](https://github.com/Leaflet/Leaflet/pull/3371)
* Fixed keyboard zoom out not working on `azerty` keyboards. [#3362](https://github.com/Leaflet/Leaflet/issues/3362)
* Fixed a bug where tabbing to an offscreen marker broke control positioning (by [@IvanSanchez](https://github.com/IvanSanchez)). [#3340](https://github.com/Leaflet/Leaflet/pull/3340) [#3333](https://github.com/Leaflet/Leaflet/issues/3333)
* Fixed `Map` `panBy` not always returning `this` (by [@Trufi](https://github.com/Trufi)). [#3303](https://github.com/Leaflet/Leaflet/pull/3303)
* Fixed a bug where pushing a zoom control with a keyboard would switch focus to the map (by [@Jakobud](https://github.com/Jakobud)). [#3275](https://github.com/Leaflet/Leaflet/pull/3275) [#3159](https://github.com/Leaflet/Leaflet/issues/3159)
* Fixed more race conditions leading to map freeze. [#3270](https://github.com/Leaflet/Leaflet/pull/3270) [#3268](https://github.com/Leaflet/Leaflet/issues/3268) [#2693](https://github.com/Leaflet/Leaflet/issues/2693) [#2478](https://github.com/Leaflet/Leaflet/issues/2478)
* Fixed iOS race condition when doing a very small pan. [#2519](https://github.com/Leaflet/Leaflet/issues/2519)
* Fixed `Polygon` `toGeoJSON` exporting a `MultiPolygon` in some cases (by [@yohanboniface](https://github.com/yohanboniface)). [#2977](https://github.com/Leaflet/Leaflet/pull/2977)
* Fixed `TileLayer.WMS` passing all options as WMS params. [#2972](https://github.com/Leaflet/Leaflet/issues/2972)
* Fixed a race condition that made `map.fitBounds(map.getBounds())` zoom out sometimes. [#2957](https://github.com/Leaflet/Leaflet/issues/2957)
* Fixed a bug where a draggable marker stopped being draggable after `setIcon` (by [@jeffsmale90](https://github.com/jeffsmale90)). [#2578](https://github.com/Leaflet/Leaflet/issues/2578)
* Fixed some IE11 touch performance and stability issues (by [@danzel](https://github.com/danzel)). [#3007](https://github.com/Leaflet/Leaflet/pull/3007) [#2820](https://github.com/Leaflet/Leaflet/issues/2820)
* Fixed a race condition with `TileLayer` when `maxNativeZoom = 0`. [#3004](https://github.com/Leaflet/Leaflet/issues/3004)
* Fixed `FeatureGroup` `setStyle` not affecting `ImageOverlay` `opacity` (by [@opie](https://github.com/opie)). [#3008](https://github.com/Leaflet/Leaflet/pull/3008) [#2246](https://github.com/Leaflet/Leaflet/issues/2246)
* Fixed class init hooks not being called for parent classes (by [@jfirebaugh](https://github.com/jfirebaugh)). [#2545](https://github.com/Leaflet/Leaflet/issues/2545)
* Fixed a bug when adding a control that's already added or removing a control that's not present (by [@jfirebaugh](https://github.com/jfirebaugh)). [#3020](https://github.com/Leaflet/Leaflet/issues/3020) [#2877](https://github.com/Leaflet/Leaflet/issues/2877)
* Fixed buggy inertia on low zoom levels when `Map` `worldCopyJump` option is enabled (by [@flemenach](https://github.com/flemenach)). [#3038](https://github.com/Leaflet/Leaflet/pull/3038) [#2624](https://github.com/Leaflet/Leaflet/issues/2624)
* Fixed a bug where `getMaxZoom` sometimes returned wrong result inside a `Control.Layers` `baselayerchange` event (by [@CloudNiner](https://github.com/CloudNiner)). [#3048](https://github.com/Leaflet/Leaflet/pull/3048) [#2318](https://github.com/Leaflet/Leaflet/issues/2318)
* Fixed a bug where during zooming one map, dragging was disabled on all other maps on the page (by [@kdeloach](https://github.com/kdeloach)). [#3050](https://github.com/Leaflet/Leaflet/pull/3050) [#2539](https://github.com/Leaflet/Leaflet/issues/2539)
* Fixed a `Map` `getSize` race condition where it could return a wrong result (by [@kshepard](https://github.com/kshepard)). [#3052](https://github.com/Leaflet/Leaflet/pull/3052) [#3031](https://github.com/Leaflet/Leaflet/issues/3031)
* Fixed `L.latLng` factory to accept `altitude` as a third argument too (by [@lonelyelk](https://github.com/lonelyelk)). [#3070](https://github.com/Leaflet/Leaflet/pull/3070).
* Fixed `L.latLng` factory to not throw error on empty array input (by [@lonelyelk](https://github.com/lonelyelk)). [#3080](https://github.com/Leaflet/Leaflet/pull/3080) [#3079](https://github.com/Leaflet/Leaflet/issues/3079)
* Fixed popups to have a default color (by [@snkashis](https://github.com/snkashis)). [#3115](https://github.com/Leaflet/Leaflet/pull/3115) [#3112](https://github.com/Leaflet/Leaflet/issues/3112) [#333](https://github.com/Leaflet/Leaflet/issues/333)
* Fixed `Map` `locate` not to mutate the given options object (by [@tmcw](https://github.com/tmcw)). [#3173](https://github.com/Leaflet/Leaflet/pull/3173)
* Fixed Canvas polylines not to render if stroke is set to 0 (by [@optical](https://github.com/optical)). [#3203](https://github.com/Leaflet/Leaflet/pull/3203)
* Prevented a Joomla bug that could lead to vector layers disappearing (by [@SniperSister](https://github.com/SniperSister)). [#2886](https://github.com/Leaflet/Leaflet/pull/2886) [#2881](https://github.com/Leaflet/Leaflet/issues/2881) [Leaflet/Leaflet#2881](https://github.com/Leaflet/Leaflet/issues/2881)
* Fixed IE Metro touch events passing through objects on top of a Leaflet map (by [@nikgavalas](https://github.com/nikgavalas)). [#2954](https://github.com/Leaflet/Leaflet/pull/2954)
* Fixed a bug where vector layers wouldn't display on websites with SVG max-width set to 100% (by [@SniperSister](https://github.com/SniperSister)). [#2886](https://github.com/Leaflet/Leaflet/pull/2886) [#2881](https://github.com/Leaflet/Leaflet/issues/2881)
* Fixed `Marker` `setIcon` to not reset popup anchor offset (by [@bullgare](https://github.com/bullgare)). [#2872](https://github.com/Leaflet/Leaflet/pull/2872)
* Fixed a case where you provide `zoom` in `Map` options and then set center (by [@AndriiHeonia](https://github.com/AndriiHeonia)). [#2849](https://github.com/Leaflet/Leaflet/pull/2849) [#1871](https://github.com/Leaflet/Leaflet/issues/1871)
* Fixed a race condition with `TileLayer` `setUrl` where `loading` event didn't fire properly (by [@bennlich](https://github.com/bennlich)). [#2802](https://github.com/Leaflet/Leaflet/pull/2802) [#2675](https://github.com/Leaflet/Leaflet/issues/2675) [#2827](https://github.com/Leaflet/Leaflet/pull/2827)
* Fixed a bug where a tile layer was not cleaned up properly after zooming past its max zoom (by [@francis-liberty](https://github.com/francis-liberty)). [#2764](https://github.com/Leaflet/Leaflet/pull/2764) [#1905](https://github.com/Leaflet/Leaflet/issues/1905)
* Fixed a memory leak with `Marker` `setIcon` (by [@jfgodoy](https://github.com/jfgodoy)). [#2811](https://github.com/Leaflet/Leaflet/pull/2811)
* Fixed `LatLng` `distanceTo` to not return `NaN` on equal locations. [#2705](https://github.com/Leaflet/Leaflet/issues/2705)
* Fixed a bug where `TileLayer` `maxNativeZoom` didn't work properly with `bounds` option set (by [@mlegenhausen](https://github.com/mlegenhausen)). [#2725](https://github.com/Leaflet/Leaflet/pull/2725) [#2704](https://github.com/Leaflet/Leaflet/issues/2704)
* Fixed a bug where tiles touching the edge of the bounds from outside where loaded (by [@IvanSanchez](https://github.com/IvanSanchez)). [#2981](https://github.com/Leaflet/Leaflet/issues/2981) [#3508](https://github.com/Leaflet/Leaflet/pull/3508)
* Fixed a memory leak in `map.remove()` (by [@IvanSanchez](https://github.com/IvanSanchez)). [#3514](https://github.com/Leaflet/Leaflet/pull/3514) [#2718](https://github.com/Leaflet/Leaflet/issues/2718)
* Fixed a bug where layers control collapsed when hovering over a disabled radio button (by [@rowanwins](https://github.com/rowanwins)). [#3564](https://github.com/Leaflet/Leaflet/pull/3564) [#2771](https://github.com/Leaflet/Leaflet/issues/2771) [Leaflet#2771](https://github.com/Leaflet/Leaflet/issues/2771)
* Fixed GeoJSON not accepting null geometry (by [@pglotov](https://github.com/pglotov)). [#3585](https://github.com/Leaflet/Leaflet/pull/3585)
* Fixed occasional popup 1px horizontal offset (by [@patrickarlt](https://github.com/patrickarlt)). [#3587](https://github.com/Leaflet/Leaflet/pull/3587) [#3526](https://github.com/Leaflet/Leaflet/pull/3526) [#3586](https://github.com/Leaflet/Leaflet/issues/3586) [#3525](https://github.com/Leaflet/Leaflet/issues/3525)
* Fixed some inconsistencies in mouse events for Canvas vector layers (by [@wpf500](https://github.com/wpf500)). [#3590](https://github.com/Leaflet/Leaflet/pull/3590) [#3568](https://github.com/Leaflet/Leaflet/issues/3568) [#3618](https://github.com/Leaflet/Leaflet/pull/3618)
* Fixed scale control for non-earth CRS (by [@cmulders](https://github.com/cmulders)). [#3614](https://github.com/Leaflet/Leaflet/pull/3614)

### Misc improvements

* Improved the build system (`jake build`) to report gzipped library size.
* Added version name and commit number to Leaflet builds. [#2276](https://github.com/Leaflet/Leaflet/issues/2276)
* Added Leaflet logo in vector format as `src/images/logo.svg`.
* Added reference to Leaflet CSS in `package.json` (by [@bclinkinbeard](https://github.com/bclinkinbeard)). [#2432](https://github.com/Leaflet/Leaflet/pull/2432)
* Switched from JSHint to ESLint for checking code style and made the checks more strict. [#3176](https://github.com/Leaflet/Leaflet/pull/3176)
* Added a plugin guide section on module loaders and publishing plugins (by [@patrickarlt](https://github.com/patrickarlt)). [#2955](https://github.com/Leaflet/Leaflet/pull/2955) [Leaflet/Leaflet#2955](https://github.com/Leaflet/Leaflet/pull/2955)
* Fixed the build system to work in non-git Leaflet folder (by [@cschwarz](https://github.com/cschwarz)). [#2758](https://github.com/Leaflet/Leaflet/pull/2758)


## 0.7.7 (October 26, 2015) ## 0.7.7 (October 26, 2015)


* Fixed a regression that could sometimes cause tiles to disappear when pinch-zooming on iOS devices. * Fixed a regression that could sometimes cause tiles to disappear when pinch-zooming on iOS devices.


Note tha we skipped 0.7.6 version for which we accidentally published a broken build to NPM. Note tha we skipped 0.7.6 version for which we accidentally published a broken build to NPM.



## 0.7.5 (September 2, 2015) ## 0.7.5 (September 2, 2015)


* Fixed a regression that broke animation in Leaflet.markercluster. [#3796](https://github.com/Leaflet/Leaflet/issues/3796) * Fixed a regression that broke animation in Leaflet.markercluster. [#3796](https://github.com/Leaflet/Leaflet/issues/3796)



## 0.7.4 (September 1, 2015) ## 0.7.4 (September 1, 2015)


* Fixed a bug introduced by a recent Chrome update that caused the map not to react to interactions until all tiles are loaded. [#3689](https://github.com/Leaflet/Leaflet/issues/3689) * Fixed a bug introduced by a recent Chrome update that caused the map not to react to interactions until all tiles are loaded. [#3689](https://github.com/Leaflet/Leaflet/issues/3689)
* Fixed a bug where tile layers were not respecting their `minZoom` or `maxZoom` options (by [@ivansanchez](https://github.com/ivansanchez)) [#3778](https://github.com/Leaflet/Leaflet/pull/3778) * Fixed a bug where tile layers were not respecting their `minZoom` or `maxZoom` options (by [@ivansanchez](https://github.com/ivansanchez)) [#3778](https://github.com/Leaflet/Leaflet/pull/3778)
* Improved detection of touch-capable web browsers, in particular fixing touch interactions in device emulation mode in Chrome and Firefox (by [@ivansanchez](https://github.com/ivansanchez)) [#3520](https://github.com/Leaflet/Leaflet/pull/3520) [#3710](https://github.com/Leaflet/Leaflet/pull/3710) * Improved detection of touch-capable web browsers, in particular fixing touch interactions in device emulation mode in Chrome and Firefox (by [@ivansanchez](https://github.com/ivansanchez)) [#3520](https://github.com/Leaflet/Leaflet/pull/3520) [#3710](https://github.com/Leaflet/Leaflet/pull/3710)
* Fixed a bug where tile layers with `maxNativeZoom` were not checking bounds properly (by [@jlaxon](https://github.com/jlaxon)) [#3415](https://github.com/Leaflet/Leaflet/pull/3152) * Fixed a bug where tile layers with `maxNativeZoom` were not checking bounds properly (by [@jlaxon](https://github.com/jlaxon)) [#3415](https://github.com/Leaflet/Leaflet/pull/3152)
* Fixed a bug where popups were not remembering which layer originated them after calling `bindPopup(popup)` (by [@Eschon](https://github.com/Eschon)) [#3675](https://github.com/Leaflet/Leaflet/pull/3765)
* Fixed a bug where popups were not remembering which layer originated them after calling `bindPopup(popup)` (by [@Eschon](https://github.com/Eschon)) [#3675](https://github.com/Leaflet/Leaflet/pull/3675)
* Fixed a race condition between markers and zoom animation (by [@perliedman](https://github.com/perliedman)) [#3152](https://github.com/Leaflet/Leaflet/pull/3152) * Fixed a race condition between markers and zoom animation (by [@perliedman](https://github.com/perliedman)) [#3152](https://github.com/Leaflet/Leaflet/pull/3152)
* Fixed a bug with `Map.fitBounds` padding (by [@bsstoner](https://github.com/bsstoner)). [#2489](https://github.com/Leaflet/Leaflet/issues/2489) * Fixed a bug with `Map.fitBounds` padding (by [@bsstoner](https://github.com/bsstoner)). [#2489](https://github.com/Leaflet/Leaflet/issues/2489)
* Allow canvas paths to fire `dblclick` and `contextmenu` events (by [@ivansanchez](https://github.com/ivansanchez)) [#3482](https://github.com/Leaflet/Leaflet/pull/3482) * Allow canvas paths to fire `dblclick` and `contextmenu` events (by [@ivansanchez](https://github.com/ivansanchez)) [#3482](https://github.com/Leaflet/Leaflet/pull/3482)
* Allow canvas lines to use `lineCap` and `lineJoin` options (by [@northerneyes](https://github.com/northerneyes)) [#3156](https://github.com/Leaflet/Leaflet/pull/3156) * Allow canvas lines to use `lineCap` and `lineJoin` options (by [@northerneyes](https://github.com/northerneyes)) [#3156](https://github.com/Leaflet/Leaflet/pull/3156)
* Updated bower definitions to comply with best practices (by [@guptaso2](https://github.com/guptaso2)) [#2726](https://github.com/Leaflet/Leaflet/pull/2726) [#3448](https://github.com/Leaflet/Leaflet/pull/3448) * Updated bower definitions to comply with best practices (by [@guptaso2](https://github.com/guptaso2)) [#2726](https://github.com/Leaflet/Leaflet/pull/2726) [#3448](https://github.com/Leaflet/Leaflet/pull/3448)



## 0.7.3 (May 23, 2014) ## 0.7.3 (May 23, 2014)


* Added proper **bower** and **component** support (by [@calvinmetcalf](https://github.com/calvinmetcalf)). [#2561](https://github.com/Leaflet/Leaflet/pull/2561) [#1903](https://github.com/Leaflet/Leaflet/issues/1903) * Added proper **bower** and **component** support (by [@calvinmetcalf](https://github.com/calvinmetcalf)). [#2561](https://github.com/Leaflet/Leaflet/pull/2561) [#1903](https://github.com/Leaflet/Leaflet/issues/1903)
* Fixed a bug where dragging the map outside the window caused an error on FF. [#2610](https://github.com/Leaflet/Leaflet/issues/2610) * Fixed a bug where dragging the map outside the window caused an error on FF. [#2610](https://github.com/Leaflet/Leaflet/issues/2610)
* Fixed a bug where some taps on Android where not working, often falsely perceived as drags (by [@axefrog](https://github.com/axefrog)). [#2503](https://github.com/Leaflet/Leaflet/pull/2503) * Fixed a bug where some taps on Android where not working, often falsely perceived as drags (by [@axefrog](https://github.com/axefrog)). [#2503](https://github.com/Leaflet/Leaflet/pull/2503)
* Fixed a bug where tapping too quickly on Android ignored most taps. [#2303](https://github.com/Leaflet/Leaflet/issues/2303)
* Fixed a bug where clicks on Android were skipped when happened too fast. [#2303](https://github.com/Leaflet/Leaflet/issues/2303)
* Fixed a bug where calling `setView` (or similar methods) several times in succession could freeze the map. [#2521](https://github.com/Leaflet/Leaflet/issues/2521) [#2236](https://github.com/Leaflet/Leaflet/issues/2236) [#2485](https://github.com/Leaflet/Leaflet/issues/2485) * Fixed a bug where calling `setView` (or similar methods) several times in succession could freeze the map. [#2521](https://github.com/Leaflet/Leaflet/issues/2521) [#2236](https://github.com/Leaflet/Leaflet/issues/2236) [#2485](https://github.com/Leaflet/Leaflet/issues/2485)
* Fixed a bug where `Control.Layers` wasn't properly removed (by [@jack-kerouac](https://github.com/jack-kerouac)). [#2569](https://github.com/Leaflet/Leaflet/pull/2569) * Fixed a bug where `Control.Layers` wasn't properly removed (by [@jack-kerouac](https://github.com/jack-kerouac)). [#2569](https://github.com/Leaflet/Leaflet/pull/2569)
* Fixed a bug that caused `TileLayer` `load` event not to fire properly. [#2510](https://github.com/Leaflet/Leaflet/issues/2510) * Fixed a bug that caused `TileLayer` `load` event not to fire properly. [#2510](https://github.com/Leaflet/Leaflet/issues/2510)
* Fixed Canvas-based paths not triggering `remove` event when removed (by @adimitrov). [#2486](https://github.com/Leaflet/Leaflet/pull/2486) * Fixed Canvas-based paths not triggering `remove` event when removed (by @adimitrov). [#2486](https://github.com/Leaflet/Leaflet/pull/2486)
* Fixed a bug where you could end up with fractional zoom after pinch-zooming in some cases (by [@danzel](https://github.com/danzel). [#2400](https://github.com/Leaflet/Leaflet/pull/2400) [#1943](https://github.com/Leaflet/Leaflet/issues/1934) * Fixed a bug where you could end up with fractional zoom after pinch-zooming in some cases (by [@danzel](https://github.com/danzel). [#2400](https://github.com/Leaflet/Leaflet/pull/2400) [#1943](https://github.com/Leaflet/Leaflet/issues/1934)


## 0.7.2 (January 17, 2013)

## 0.7.2 (January 17, 2014)


* Fixed a bug that appeared with **Chrome 32 update** that made all **mouse events shifted on scrolled pages**. [#2352](https://github.com/Leaflet/Leaflet/issues/2352) * Fixed a bug that appeared with **Chrome 32 update** that made all **mouse events shifted on scrolled pages**. [#2352](https://github.com/Leaflet/Leaflet/issues/2352)
* Fixed a bug that could break tile loading when using non-standard tile sizes. [#2288](https://github.com/Leaflet/Leaflet/issues/2288) * Fixed a bug that could break tile loading when using non-standard tile sizes. [#2288](https://github.com/Leaflet/Leaflet/issues/2288)
* Fixed a bug where `maxNativeZoom` option didn't work with TMS tile layers (by [@perliedman](https://github.com/perliedman)). [#2321](https://github.com/Leaflet/Leaflet/issues/2321) [#2314](https://github.com/Leaflet/Leaflet/issues/2314) * Fixed a bug where `maxNativeZoom` option didn't work with TMS tile layers (by [@perliedman](https://github.com/perliedman)). [#2321](https://github.com/Leaflet/Leaflet/issues/2321) [#2314](https://github.com/Leaflet/Leaflet/issues/2314)



## 0.7.1 (December 6, 2013) ## 0.7.1 (December 6, 2013)


* Fixed a bug where pinch-zooming quickly could occasionally leave the map at a fractional zoom thus breaking tile loading (by [@danzel](https://github.com/danzel)). [#2269](https://github.com/Leaflet/Leaflet/pull/2269) [#2255](https://github.com/Leaflet/Leaflet/issues/2255) [#1934](https://github.com/Leaflet/Leaflet/issues/1934) * Fixed a bug where pinch-zooming quickly could occasionally leave the map at a fractional zoom thus breaking tile loading (by [@danzel](https://github.com/danzel)). [#2269](https://github.com/Leaflet/Leaflet/pull/2269) [#2255](https://github.com/Leaflet/Leaflet/issues/2255) [#1934](https://github.com/Leaflet/Leaflet/issues/1934)

+ 59
- 29
vendor/bower/leaflet/CONTRIBUTING.md Переглянути файл

2. [Reporting Bugs](#reporting-bugs) 2. [Reporting Bugs](#reporting-bugs)
3. [Contributing Code](#contributing-code) 3. [Contributing Code](#contributing-code)
4. [Improving Documentation](#improving-documentation) 4. [Improving Documentation](#improving-documentation)
5. [Code of Conduct](#code-of-conduct)


## Getting Involved ## Getting Involved


Third-party patches are absolutely essential on our quest to create the best mapping library that will ever exist. Third-party patches are absolutely essential on our quest to create the best mapping library that will ever exist.
However, they're not the only way to get involved with the development of Leaflet.
You can help the project tremendously by discovering and [reporting bugs](#reporting-bugs),
[improving documentation](#improving-documentation),
helping others on the [Leaflet forum](https://groups.google.com/forum/#!forum/leaflet-js)
and [GitHub issues](https://github.com/Leaflet/Leaflet/issues),
showing your support for your favorite feature suggestions on [Leaflet UserVoice page](http://leaflet.uservoice.com),
tweeting to [@LeafletJS](http://twitter.com/LeafletJS)
However, they're not the only way to get involved with Leaflet development.
You can help the project tremendously by discovering and [reporting bugs](#reporting-bugs);
[improving documentation](#improving-documentation);
helping others on [Stack Overflow](https://stackoverflow.com/questions/tagged/leaflet),
[GIS Stack Exchange](https://gis.stackexchange.com/questions/tagged/leaflet)
and [GitHub issues](https://github.com/Leaflet/Leaflet/issues);
showing your support for your favorite feature suggestions on [Leaflet UserVoice page](http://leaflet.uservoice.com);
tweeting to [@LeafletJS](http://twitter.com/LeafletJS);
and spreading the word about Leaflet among your colleagues and friends. and spreading the word about Leaflet among your colleagues and friends.


## Reporting Bugs ## Reporting Bugs
Second, search the already reported issues for similar cases, Second, search the already reported issues for similar cases,
and if it's already reported, just add any additional details in the comments. and if it's already reported, just add any additional details in the comments.


After you made sure that you've found a new Leaflet bug,
After you've made sure that you've found a new Leaflet bug,
here are some tips for creating a helpful report that will make fixing it much easier and quicker: here are some tips for creating a helpful report that will make fixing it much easier and quicker:


* Write a **descriptive, specific title**. Bad: *Problem with polylines*. Good: *Doing X in IE9 causes Z*. * Write a **descriptive, specific title**. Bad: *Problem with polylines*. Good: *Doing X in IE9 causes Z*.
* Include **browser, OS and Leaflet version** info in the description. * Include **browser, OS and Leaflet version** info in the description.
* Create a **simple test case** that demonstrates the bug (e.g. using [JSFiddle](http://jsfiddle.net/)).
* Create a **simple test case** that demonstrates the bug (e.g. using [Leaflet playground](http://playground-leaflet.rhcloud.com/)).
* Check whether the bug can be reproduced in **other browsers**. * Check whether the bug can be reproduced in **other browsers**.
* Check if the bug occurs in the stable version, master, or both. * Check if the bug occurs in the stable version, master, or both.
* *Bonus tip:* if the bug only appears in the master version but the stable version is fine, * *Bonus tip:* if the bug only appears in the master version but the stable version is fine,
use `git bisect` to find the exact commit that introduced the bug. use `git bisect` to find the exact commit that introduced the bug.


If you just want some help with your project, If you just want some help with your project,
try asking [on the Leaflet forum](https://groups.google.com/forum/#!forum/leaflet-js) instead.
try asking on [Stack Overflow](https://stackoverflow.com/questions/tagged/leaflet)
or [GIS Stack Exchange](https://gis.stackexchange.com/questions/tagged/leaflet) instead.


## Contributing Code ## Contributing Code


### Considerations for Accepting Patches ### Considerations for Accepting Patches


While we happily accept patches, we're also commited to keeping Leaflet simple, lightweight and blazingly fast.
While we happily accept patches, we're also committed to keeping Leaflet simple, lightweight and blazingly fast.
So bugfixes, performance optimizations and small improvements that don't add a lot of code So bugfixes, performance optimizations and small improvements that don't add a lot of code
are much more likely to get accepted quickly. are much more likely to get accepted quickly.


Before sending a pull request with a new feature, first check if it's been discussed before already
Before sending a pull request with a new feature, check if it's been discussed before already
(either on [GitHub issues](https://github.com/Leaflet/Leaflet/issues) (either on [GitHub issues](https://github.com/Leaflet/Leaflet/issues)
or [Leaflet UserVoice](http://leaflet.uservoice.com/)), or [Leaflet UserVoice](http://leaflet.uservoice.com/)),
and then ask yourself two questions:
and ask yourself two questions:


1. Are you sure that this new feature is important enough to justify its presense in the Leaflet core?
1. Are you sure that this new feature is important enough to justify its presence in the Leaflet core?
Or will it look better as a plugin in a separate repository? Or will it look better as a plugin in a separate repository?
2. Is it written in a simple, concise way that doesn't add bulk to the codebase? 2. Is it written in a simple, concise way that doesn't add bulk to the codebase?




### Setting up the Build System ### Setting up the Build System


To set up the Leaflet build system, install [Node](http://nodejs.org/),
then run the following commands in the project root:
The Leaflet build system uses [Node](http://nodejs.org/), and the [Jake](http://jakejs.com/) Javascript build tool.
To set up the Leaflet build system, install Node then run the following commands in the project root to install Jake:


``` ```
npm install -g jake npm install -g jake
You should also follow the code style and whitespace conventions of the original codebase. You should also follow the code style and whitespace conventions of the original codebase.
In particular, use tabs for indentation and spaces for alignment. In particular, use tabs for indentation and spaces for alignment.


Before commiting your changes, run `jake lint` to catch any JS errors in the code and fix them.
Before committing your changes, run `jake lint` to catch any JS errors in the code and fix them.
If you add any new files to the Leaflet source, make sure to also add them to `build/deps.js` If you add any new files to the Leaflet source, make sure to also add them to `build/deps.js`
so that the build system knows about them. so that the build system knows about them.


jake test --cov jake test --cov
``` ```


After that, open `spec/coverage/<environment>/index.html` in a browser to see the report.
After that, open `coverage/<environment>/index.html` in a browser to see the report.
From there you can click through folders/files to get details on their individual coverage. From there you can click through folders/files to get details on their individual coverage.


## Improving Documentation ## Improving Documentation


The code of the live Leaflet website that contains all documentation and examples is located in the `gh-pages` branch
and is automatically generated from a set of HTML and Markdown files by [Jekyll](https://github.com/mojombo/jekyll).
The code of the live Leaflet website that contains all documentation and examples is located in the `docs/` directory of the `master` branch
and is automatically generated from a set of HTML and Markdown files by [Jekyll](http://jekyllrb.com/).


The easiest way to make little improvements such as fixing typos without even leaving the browser The easiest way to make little improvements such as fixing typos without even leaving the browser
is by editing one of the files with the online GitHub editor: is by editing one of the files with the online GitHub editor:
browse the [gh-pages branch](https://github.com/Leaflet/Leaflet/tree/gh-pages),
choose a certain file for editing (e.g. `reference.html` for API reference),
browse the [`docs/ directory`](https://github.com/Leaflet/Leaflet/tree/master/docs),
choose a certain file for editing (e.g. `plugins.html` for the list of Leaflet plugins),
click the Edit button, make changes and follow instructions from there. click the Edit button, make changes and follow instructions from there.
Once it gets merged, the changes will immediately appear on the website. Once it gets merged, the changes will immediately appear on the website.




1. [Install Ruby](http://www.ruby-lang.org/en/) if don't have it yet. 1. [Install Ruby](http://www.ruby-lang.org/en/) if don't have it yet.
2. Run `gem install jekyll`. 2. Run `gem install jekyll`.
3. Run `jekyll serve --watch` in the root `Leaflet` folder.
4. Open `localhost:4000` in your browser.
3. Enter the directory where you cloned the Leaflet repository
4. Make sure you are in the `master` branch by running `git checkout master`
5. Enter the documentation subdirectory by running `cd docs`
6. Run `jekyll serve --watch`.
7. Open `localhost:4000` in your web browser.


Now any file changes will be updated when you reload pages automatically. Now any file changes will be updated when you reload pages automatically.
After commiting the changes, just send a pull request.
After committing the changes, just send a pull request.


If you need to update documentation according to a new feature that only appeared in the master version (not stable one),
you need to make changes to `gh-pages-master` branch instead of `gh-pages`.
It will get merged into the latter when released as stable.
### API documentation

Since Leaflet 1.0.0-rc1, the API documentation in `reference-1.0.0.html` is handled
via [Leafdoc](https://github.com/Leaflet/Leafdoc). This means that next to the
code for every method, option or property there is a special code comment documenting
that feature. In order to edit the API documentation, just edit these comments in the
source code.

In order to generate the documentation, just run

```
jake docs
```

and you'll find a `.html` file in the `dist/` directory.

On every release of a new Leaflet version, this file will be generated and copied
over to `docs/reference.html` - there is no need to send pull requests with changes to this file to update the API documentation.

## Code of Conduct

Everyone is invited to participate in the Leaflet community and related projects:
we want to create a welcoming and friendly environment.
Harassment of participants or other unethical and unprofessional behavior will not be tolerated in our spaces.
The [Contributor Covenant](http://contributor-covenant.org/version/1/3/0/)
applies to all projects under the Leaflet organization.
Report any issues to agafonkin@gmail.com.


## Thank You ## Thank You


Not only are we grateful for any contributions, &mdash; helping Leaflet and its community actually makes you AWESOME.
Not only does your contribution to Leaflet and its community earn our gratitude, but it also makes you AWESOME.
Join [this approved list of awesome people](https://github.com/Leaflet/Leaflet/graphs/contributors) Join [this approved list of awesome people](https://github.com/Leaflet/Leaflet/graphs/contributors)
and help us push the limits of what's possible with online maps! and help us push the limits of what's possible with online maps!

+ 34
- 10
vendor/bower/leaflet/Jakefile.js Переглянути файл

npm install npm install


To check the code for errors and build Leaflet from source, run "jake". To check the code for errors and build Leaflet from source, run "jake".
To run the tests, run "jake test".
To run the tests, run "jake test". To build the documentation, run "jake docs".


For a custom build, open build/build.html in the browser and follow the instructions. For a custom build, open build/build.html in the browser and follow the instructions.
*/ */


var build = require('./build/build.js');
var build = require('./build/build.js'),
buildDocs = require('./build/docs'),
git = require('git-rev');


function hint(msg, paths) {
function hint(msg, args) {
return function () { return function () {
console.log(msg); console.log(msg);
jake.exec('node node_modules/jshint/bin/jshint -c ' + paths,
jake.exec('node node_modules/eslint/bin/eslint.js ' + args,
{printStdout: true}, function () { {printStdout: true}, function () {
console.log('\tCheck passed.\n'); console.log('\tCheck passed.\n');
complete(); complete();
}); });
};
}

// Returns the version string in package.json, plus a semver build metadata if
// this is not an official release
function calculateVersion(officialRelease, callback) {

var version = require('./package.json').version;

if (officialRelease) {
callback(version);
} else {
git.short(function(str) {
callback (version + '+' + str);
});
} }
} }


desc('Check Leaflet source for errors with JSHint');
task('lint', {async: true}, hint('Checking for JS errors...', 'build/hintrc.js src'));
desc('Check Leaflet source for errors with ESLint');
task('lint', {async: true}, hint('Checking for JS errors...', 'src'));


desc('Check Leaflet specs source for errors with JSHint');
task('lintspec', {async: true}, hint('Checking for specs JS errors...', 'spec/spec.hintrc.js spec/suites'));
desc('Check Leaflet specs source for errors with ESLint');
task('lintspec', {async: true}, hint('Checking for specs JS errors...', 'spec/suites'));


desc('Combine and compress Leaflet source files'); desc('Combine and compress Leaflet source files');
task('build', {async: true}, function () {
build.build(complete);
task('build', {async: true}, function (compsBase32, buildName, officialRelease) {
calculateVersion(officialRelease, function(v){
build.build(complete, v, compsBase32, buildName);
});
}); });


desc('Run PhantomJS tests'); desc('Run PhantomJS tests');
build.test(complete); build.test(complete);
}); });


desc('Build documentation');
task('docs', {}, function() {
buildDocs();
});

task('default', ['test', 'build']); task('default', ['test', 'build']);


jake.addListener('complete', function () { jake.addListener('complete', function () {

+ 1
- 1
vendor/bower/leaflet/LICENSE Переглянути файл

Copyright (c) 2010-2013, Vladimir Agafonkin
Copyright (c) 2010-2016, Vladimir Agafonkin
Copyright (c) 2010-2011, CloudMade Copyright (c) 2010-2011, CloudMade
All rights reserved. All rights reserved.

+ 97
- 3
vendor/bower/leaflet/PLUGIN-GUIDE.md Переглянути файл

- [File Structure](#file-structure) - [File Structure](#file-structure)
- [Code Conventions](#code-conventions) - [Code Conventions](#code-conventions)
- [Plugin API](#plugin-api) - [Plugin API](#plugin-api)
3. [Publishing on NPM](#publishing-on-npm)
4. [Module Loaders](#module-loaders)
5. [Adding to the plugins list](#adding-to-the-plugins-list)


## Presentation ## Presentation




### Readme ### Readme


The next thing you need to have is a descriptive `README.md` in the root of the repo (or a link to a website with a similar content).
The next thing you need to have is a [good `README.md`](https://github.com/noffle/art-of-readme) in the root of the repo (or a link to a website with a similar content).
At a minimum it should contain the following items: At a minimum it should contain the following items:


- name of the plugin - name of the plugin
Never expose global variables in your plugin.<br> Never expose global variables in your plugin.<br>
If you have a new class, put it directly in the `L` namespace (`L.MyPlugin`).<br> If you have a new class, put it directly in the `L` namespace (`L.MyPlugin`).<br>
If you inherit one of the existing classes, make it a sub-property (`L.TileLayer.Banana`).<br> If you inherit one of the existing classes, make it a sub-property (`L.TileLayer.Banana`).<br>
Every class should have a factory function in camelCase, e.g. (`L.tileLayer.banana`).<br>
If you want to add new methods to existing Leaflet classes, you can do it like this: `L.Marker.include({myPlugin: …})`. If you want to add new methods to existing Leaflet classes, you can do it like this: `L.Marker.include({myPlugin: …})`.


Function, method and property names should be in `camelCase`.<br>
Function, method, property and factory names should be in `camelCase`.<br>
Class names should be in `CapitalizedCamelCase`. Class names should be in `CapitalizedCamelCase`.


If you have a lot of arguments in your function, consider accepting an options object instead If you have a lot of arguments in your function, consider accepting an options object instead
(putting default values where possible so that users don't need specify all of them):
(putting default values where possible so that users don't need to specify all of them):


```js ```js
// bad // bad
``` ```


And most importantly, keep it simple. Leaflet is all about *simplicity*. And most importantly, keep it simple. Leaflet is all about *simplicity*.

## Publishing on NPM

NPM (Node Packaged Modules) is a package manager and code repository for JavaScript. Publishing your module on NPM allows other developers to quickly find and install your plugin as well as any other plugins it depends on.

NPM has an excellent [developers guide](https://www.npmjs.org/doc/misc/npm-developers.html) to help you through the process.

When you publish your plugin you should add a dependency on `leaflet` to your `package.json` file. This will automatically install Leaflet when your package is installed.

Here is an example of a `package.json` file for a Leaflet plugin.

```json
{
"name": "my-leaflet-plugin",
"version": "1.0.0",
"description": "A simple leaflet plugin.",
"main": "my-plugin.js",
"author": "You",
"license": "IST",
"peerDependencies": {
"leaflet": "^1.0.0"
}
}
```

If possible, do not commit your minified files (e.g. `dist`) to a repo; this can
lead to confussion when trying to debug the wrong file. Instead, use `npm` to
trigger a build/minification just before publishing your package with a
[`prepublish` script](https://docs.npmjs.com/misc/scripts#common-uses), for example:

```json
{
"name": "my-leaflet-plugin",
...
"scripts": {
"prepublish": "grunt build"
}
}
```

You can then use the [`.gitignore`](https://help.github.com/articles/ignoring-files/)
file to make sure the minified files are not versioned, and an
[empty `.npmignore`](https://docs.npmjs.com/misc/developers#keeping-files-out-of-your-package)
to ensure that they are published to NPM.

## Module Loaders

Module loaders such as [RequireJS](http://requirejs.org/) and [Browserify](http://browserify.org/) implement module systems like AMD (Asynchronous Module Definition) and CommonJS to allow developers to modularize and load their code.

You can add support for AMD/CommonJS loaders to your Leaflet plugin by following this pattern based on the [Universal Module Definition](https://github.com/umdjs/umd/blob/master/templates/returnExportsGlobal.js)

```js
(function (factory, window) {

// define an AMD module that relies on 'leaflet'
if (typeof define === 'function' && define.amd) {
define(['leaflet'], factory);

// define a Common JS module that relies on 'leaflet'
} else if (typeof exports === 'object') {
module.exports = factory(require('leaflet'));
}

// attach your plugin to the global 'L' variable
if (typeof window !== 'undefined' && window.L) {
window.L.YourPlugin = factory(L);
}
}(function (L) {
var MyLeafletPlugin = {};
// implement your plugin

// return your plugin when you are done
return MyLeafletPlugin;
}, window));
```

Now your plugin is available as an AMD and CommonJS module and can used used in module loaders like Browserify and RequireJS.


## Adding to the plugins list

Once your plugin is published, it is a good idea to add it to the [Leaflet plugins list](http://leafletjs.com/plugins.html). To do so:

* [Fork](https://help.github.com/articles/fork-a-repo/) the Leaflet repo.
* In the `docs/plugins.md` file, find the section your plugin should go in, and add a table row with information and links about your plugin.
* Commit the code to your fork.
* [Open a pull request](https://help.github.com/articles/creating-a-pull-request/) from your fork to Leaflet's original repo.

Once the pull request is done, a Leaflet maintainer will have a quick look at your
plugin and, if everything looks right, your plugin will appear in the list shortly thereafter.

+ 6
- 8
vendor/bower/leaflet/README.md Переглянути файл

<img src="http://leafletjs.com/docs/images/logo.png" alt="Leaflet" />
<img width="600" src="https://rawgit.com/Leaflet/Leaflet/master/src/images/logo.svg" alt="Leaflet" />
Leaflet is an open source JavaScript library for **mobile-friendly interactive maps**.
It is developed by [Vladimir Agafonkin][] of [MapBox][] with a team of dedicated [contributors][].
Weighing just about 30 KB of gzipped JS code, it has all the [features][] most developers ever need for online maps.
Leaflet is the leading open-source JavaScript library for **mobile-friendly interactive maps**.
Weighing just about 37 KB of gzipped JS code, it has all the mapping [features][] most developers ever need.
Leaflet is designed with *simplicity*, *performance* and *usability* in mind. Leaflet is designed with *simplicity*, *performance* and *usability* in mind.
It works efficiently across all major desktop and mobile platforms out of the box, It works efficiently across all major desktop and mobile platforms out of the box,
Let's make the best mapping library that will ever exist, Let's make the best mapping library that will ever exist,
and push the limits of what's possible with online maps! and push the limits of what's possible with online maps!
[![Build Status](https://travis-ci.org/Leaflet/Leaflet.png?branch=master)](https://travis-ci.org/Leaflet/Leaflet)
[![Build Status](https://travis-ci.org/Leaflet/Leaflet.svg?branch=master)](https://travis-ci.org/Leaflet/Leaflet)
[Vladimir Agafonkin]: http://agafonkin.com/en
[contributors]: https://github.com/Leaflet/Leaflet/graphs/contributors [contributors]: https://github.com/Leaflet/Leaflet/graphs/contributors
[features]: http://leafletjs.com/features.html
[features]: http://leafletjs.com/#features
[plugins]: http://leafletjs.com/plugins.html [plugins]: http://leafletjs.com/plugins.html
[well-documented]: http://leafletjs.com/reference.html "Leaflet API reference" [well-documented]: http://leafletjs.com/reference.html "Leaflet API reference"
[source code]: https://github.com/Leaflet/Leaflet "Leaflet GitHub repository" [source code]: https://github.com/Leaflet/Leaflet "Leaflet GitHub repository"
[contribute]: https://github.com/Leaflet/Leaflet/blob/master/CONTRIBUTING.md "A guide to contributing to Leaflet" [contribute]: https://github.com/Leaflet/Leaflet/blob/master/CONTRIBUTING.md "A guide to contributing to Leaflet"
[official website]: http://leafletjs.com [official website]: http://leafletjs.com
[download page]: http://leafletjs.com/download.html [download page]: http://leafletjs.com/download.html
[MapBox]: https://mapbox.com

+ 3
- 8
vendor/bower/leaflet/bower.json Переглянути файл

{ {
"name": "leaflet", "name": "leaflet",
"version": "0.7.7",
"description": "JavaScript library for mobile-friendly interactive maps", "description": "JavaScript library for mobile-friendly interactive maps",
"license": "BSD-2-Clause",
"main": [ "main": [
"dist/leaflet.css", "dist/leaflet.css",
"dist/leaflet-src.js",
"dist/images/layers-2x.png",
"dist/images/layers.png",
"dist/images/marker-icon-2x.png",
"dist/images/marker-icon.png",
"dist/images/marker-shadow.png"
"dist/leaflet-src.js"
], ],
"ignore": [
"ignore": [
".*", ".*",
"CHANGELOG.json", "CHANGELOG.json",
"FAQ.md", "FAQ.md",

+ 0
- 20
vendor/bower/leaflet/component.json Переглянути файл

{
"name": "leaflet",
"version": "0.7.7",
"description": "JavaScript library for mobile-friendly interactive maps",
"scripts": [
"dist/leaflet.js",
"dist/leaflet-src.js"
],
"images": [
"dist/images/layers-2x.png",
"dist/images/layers.png",
"dist/images/marker-icon-2x.png",
"dist/images/marker-icon.png",
"dist/images/marker-shadow.png"
],
"styles": [
"dist/leaflet.css"
],
"main": "dist/leaflet-src.js"
}

BIN
vendor/bower/leaflet/dist/images/layers-2x.png Переглянути файл

Before After
Width: 52  |  Height: 52  |  Size: 2.8KB Width: 52  |  Height: 52  |  Size: 1.2KB

BIN
vendor/bower/leaflet/dist/images/layers.png Переглянути файл

Before After
Width: 26  |  Height: 26  |  Size: 1.5KB Width: 26  |  Height: 26  |  Size: 696B

BIN
vendor/bower/leaflet/dist/images/marker-icon-2x.png Переглянути файл

Before After
Width: 50  |  Height: 82  |  Size: 3.9KB Width: 50  |  Height: 82  |  Size: 2.5KB

BIN
vendor/bower/leaflet/dist/images/marker-icon.png Переглянути файл

Before After
Width: 25  |  Height: 41  |  Size: 1.7KB Width: 25  |  Height: 41  |  Size: 1.4KB

BIN
vendor/bower/leaflet/dist/images/marker-shadow.png Переглянути файл

Before After
Width: 41  |  Height: 41  |  Size: 797B Width: 41  |  Height: 41  |  Size: 618B

+ 11954
- 7871
vendor/bower/leaflet/dist/leaflet-src.js
Різницю між файлами не показано, бо вона завелика
Переглянути файл


+ 181
- 36
vendor/bower/leaflet/dist/leaflet.css Переглянути файл

/* required styles */ /* required styles */
.leaflet-map-pane,
.leaflet-pane,
.leaflet-tile, .leaflet-tile,
.leaflet-marker-icon, .leaflet-marker-icon,
.leaflet-marker-shadow, .leaflet-marker-shadow,
.leaflet-tile-pane,
.leaflet-tile-container, .leaflet-tile-container,
.leaflet-overlay-pane,
.leaflet-shadow-pane,
.leaflet-marker-pane,
.leaflet-popup-pane,
.leaflet-overlay-pane svg,
.leaflet-pane > svg,
.leaflet-pane > canvas,
.leaflet-zoom-box, .leaflet-zoom-box,
.leaflet-image-layer, .leaflet-image-layer,
.leaflet-layer { .leaflet-layer {
} }
.leaflet-container { .leaflet-container {
overflow: hidden; overflow: hidden;
-ms-touch-action: none;
touch-action: none;
} }
.leaflet-tile, .leaflet-tile,
.leaflet-marker-icon, .leaflet-marker-icon,
-webkit-user-select: none; -webkit-user-select: none;
-moz-user-select: none; -moz-user-select: none;
user-select: none; user-select: none;
-webkit-user-drag: none;
-webkit-user-drag: none;
}
/* Safari renders non-retina tile on retina better with this, but Chrome is worse */
.leaflet-safari .leaflet-tile {
image-rendering: -webkit-optimize-contrast;
}
/* hack that prevents hw layers "stretching" when loading new tiles */
.leaflet-safari .leaflet-tile-container {
width: 1600px;
height: 1600px;
-webkit-transform-origin: 0 0;
} }
.leaflet-marker-icon, .leaflet-marker-icon,
.leaflet-marker-shadow { .leaflet-marker-shadow {
display: block; display: block;
} }
/* map is broken in FF if you have max-width: 100% on tiles */
.leaflet-container img {
/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */
.leaflet-container .leaflet-overlay-pane svg,
.leaflet-container .leaflet-marker-pane img,
.leaflet-container .leaflet-shadow-pane img,
.leaflet-container .leaflet-tile-pane img,
.leaflet-container img.leaflet-image-layer {
max-width: none !important; max-width: none !important;
} }
/* stupid Android 2 doesn't understand "max-width: none" properly */
.leaflet-container img.leaflet-image-layer {
max-width: 15000px !important;
.leaflet-container.leaflet-touch-zoom {
-ms-touch-action: pan-x pan-y;
touch-action: pan-x pan-y;
} }
.leaflet-container.leaflet-touch-drag {
-ms-touch-action: pinch-zoom;
}
.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
-ms-touch-action: none;
touch-action: none;
}
.leaflet-tile { .leaflet-tile {
filter: inherit; filter: inherit;
visibility: hidden; visibility: hidden;
.leaflet-zoom-box { .leaflet-zoom-box {
width: 0; width: 0;
height: 0; height: 0;
-moz-box-sizing: border-box;
box-sizing: border-box;
z-index: 800;
} }
/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ /* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
.leaflet-overlay-pane svg { .leaflet-overlay-pane svg {
-moz-user-select: none; -moz-user-select: none;
} }
.leaflet-tile-pane { z-index: 2; }
.leaflet-objects-pane { z-index: 3; }
.leaflet-overlay-pane { z-index: 4; }
.leaflet-shadow-pane { z-index: 5; }
.leaflet-marker-pane { z-index: 6; }
.leaflet-popup-pane { z-index: 7; }
.leaflet-pane { z-index: 400; }
.leaflet-tile-pane { z-index: 200; }
.leaflet-overlay-pane { z-index: 400; }
.leaflet-shadow-pane { z-index: 500; }
.leaflet-marker-pane { z-index: 600; }
.leaflet-tooltip-pane { z-index: 650; }
.leaflet-popup-pane { z-index: 700; }
.leaflet-map-pane canvas { z-index: 100; }
.leaflet-map-pane svg { z-index: 200; }
.leaflet-vml-shape { .leaflet-vml-shape {
width: 1px; width: 1px;
.leaflet-control { .leaflet-control {
position: relative; position: relative;
z-index: 7;
z-index: 800;
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
pointer-events: auto; pointer-events: auto;
} }
.leaflet-top, .leaflet-top,
/* zoom and fade animations */ /* zoom and fade animations */
.leaflet-fade-anim .leaflet-tile,
.leaflet-fade-anim .leaflet-tile {
will-change: opacity;
}
.leaflet-fade-anim .leaflet-popup { .leaflet-fade-anim .leaflet-popup {
opacity: 0; opacity: 0;
-webkit-transition: opacity 0.2s linear; -webkit-transition: opacity 0.2s linear;
-o-transition: opacity 0.2s linear; -o-transition: opacity 0.2s linear;
transition: opacity 0.2s linear; transition: opacity 0.2s linear;
} }
.leaflet-fade-anim .leaflet-tile-loaded,
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup { .leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
opacity: 1; opacity: 1;
} }
.leaflet-zoom-animated {
-webkit-transform-origin: 0 0;
-ms-transform-origin: 0 0;
transform-origin: 0 0;
}
.leaflet-zoom-anim .leaflet-zoom-animated {
will-change: transform;
}
.leaflet-zoom-anim .leaflet-zoom-animated { .leaflet-zoom-anim .leaflet-zoom-animated {
-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1); -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
-moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1); -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
transition: transform 0.25s cubic-bezier(0,0,0.25,1); transition: transform 0.25s cubic-bezier(0,0,0.25,1);
} }
.leaflet-zoom-anim .leaflet-tile, .leaflet-zoom-anim .leaflet-tile,
.leaflet-pan-anim .leaflet-tile,
.leaflet-touching .leaflet-zoom-animated {
.leaflet-pan-anim .leaflet-tile {
-webkit-transition: none; -webkit-transition: none;
-moz-transition: none; -moz-transition: none;
-o-transition: none; -o-transition: none;
/* cursors */ /* cursors */
.leaflet-clickable {
.leaflet-interactive {
cursor: pointer; cursor: pointer;
} }
.leaflet-container {
.leaflet-grab {
cursor: -webkit-grab; cursor: -webkit-grab;
cursor: -moz-grab; cursor: -moz-grab;
} }
.leaflet-crosshair,
.leaflet-crosshair .leaflet-interactive {
cursor: crosshair;
}
.leaflet-popup-pane, .leaflet-popup-pane,
.leaflet-control { .leaflet-control {
cursor: auto; cursor: auto;
} }
.leaflet-dragging .leaflet-container,
.leaflet-dragging .leaflet-clickable {
.leaflet-dragging .leaflet-grab,
.leaflet-dragging .leaflet-grab .leaflet-interactive,
.leaflet-dragging .leaflet-marker-draggable {
cursor: move; cursor: move;
cursor: -webkit-grabbing; cursor: -webkit-grabbing;
cursor: -moz-grabbing; cursor: -moz-grabbing;
} }
/* marker & overlays interactivity */
.leaflet-marker-icon,
.leaflet-marker-shadow,
.leaflet-image-layer,
.leaflet-pane > svg path,
.leaflet-tile-container {
pointer-events: none;
}
.leaflet-marker-icon.leaflet-interactive,
.leaflet-image-layer.leaflet-interactive,
.leaflet-pane > svg path.leaflet-interactive {
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
pointer-events: auto;
}
/* visual tweaks */ /* visual tweaks */
color: #333; color: #333;
background: #fff; background: #fff;
} }
.leaflet-control-layers-scrollbar {
overflow-y: scroll;
padding-right: 5px;
}
.leaflet-control-layers-selector { .leaflet-control-layers-selector {
margin-top: 2px; margin-top: 2px;
position: relative; position: relative;
margin: 5px -10px 5px -6px; margin: 5px -10px 5px -6px;
} }
/* Default icon URLs */
.leaflet-default-icon-path {
background-image: url(images/marker-icon.png);
}
/* attribution and scale controls */ /* attribution and scale controls */
font-size: 11px; font-size: 11px;
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
-moz-box-sizing: content-box;
box-sizing: content-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
background: #fff; background: #fff;
background: rgba(255, 255, 255, 0.5); background: rgba(255, 255, 255, 0.5);
.leaflet-popup { .leaflet-popup {
position: absolute; position: absolute;
text-align: center; text-align: center;
margin-bottom: 20px;
} }
.leaflet-popup-content-wrapper { .leaflet-popup-content-wrapper {
padding: 1px; padding: 1px;
margin: 18px 0; margin: 18px 0;
} }
.leaflet-popup-tip-container { .leaflet-popup-tip-container {
margin: 0 auto;
width: 40px; width: 40px;
height: 20px; height: 20px;
position: relative;
position: absolute;
left: 50%;
margin-left: -20px;
overflow: hidden; overflow: hidden;
pointer-events: none;
} }
.leaflet-popup-tip { .leaflet-popup-tip {
width: 17px; width: 17px;
.leaflet-popup-content-wrapper, .leaflet-popup-content-wrapper,
.leaflet-popup-tip { .leaflet-popup-tip {
background: white; background: white;
color: #333;
box-shadow: 0 3px 14px rgba(0,0,0,0.4); box-shadow: 0 3px 14px rgba(0,0,0,0.4);
} }
.leaflet-container a.leaflet-popup-close-button { .leaflet-container a.leaflet-popup-close-button {
top: 0; top: 0;
right: 0; right: 0;
padding: 4px 4px 0 0; padding: 4px 4px 0 0;
border: none;
text-align: center; text-align: center;
width: 18px; width: 18px;
height: 14px; height: 14px;
background: #fff; background: #fff;
border: 1px solid #666; border: 1px solid #666;
} }
/* Tooltip */
/* Base styles for the element that has a tooltip */
.leaflet-tooltip {
position: absolute;
padding: 6px;
background-color: #fff;
border: 1px solid #fff;
border-radius: 3px;
color: #222;
white-space: nowrap;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
pointer-events: none;
box-shadow: 0 1px 3px rgba(0,0,0,0.4);
}
.leaflet-tooltip.leaflet-clickable {
cursor: pointer;
pointer-events: auto;
}
.leaflet-tooltip-top:before,
.leaflet-tooltip-bottom:before,
.leaflet-tooltip-left:before,
.leaflet-tooltip-right:before {
position: absolute;
pointer-events: none;
border: 6px solid transparent;
background: transparent;
content: "";
}
/* Directions */
.leaflet-tooltip-bottom {
margin-top: 6px;
}
.leaflet-tooltip-top {
margin-top: -6px;
}
.leaflet-tooltip-bottom:before,
.leaflet-tooltip-top:before {
left: 50%;
margin-left: -6px;
}
.leaflet-tooltip-top:before {
bottom: 0;
margin-bottom: -12px;
border-top-color: #fff;
}
.leaflet-tooltip-bottom:before {
top: 0;
margin-top: -12px;
margin-left: -6px;
border-bottom-color: #fff;
}
.leaflet-tooltip-left {
margin-left: -6px;
}
.leaflet-tooltip-right {
margin-left: 6px;
}
.leaflet-tooltip-left:before,
.leaflet-tooltip-right:before {
top: 50%;
margin-top: -6px;
}
.leaflet-tooltip-left:before {
right: 0;
margin-right: -12px;
border-left-color: #fff;
}
.leaflet-tooltip-right:before {
left: 0;
margin-left: -12px;
border-right-color: #fff;
}

+ 7
- 7
vendor/bower/leaflet/dist/leaflet.js
Різницю між файлами не показано, бо вона завелика
Переглянути файл


+ 52
- 13
vendor/bower/leaflet/package.json Переглянути файл

{ {
"name": "leaflet", "name": "leaflet",
"version": "0.7.7",
"version": "1.0.3",
"description": "JavaScript library for mobile-friendly interactive maps", "description": "JavaScript library for mobile-friendly interactive maps",
"devDependencies": { "devDependencies": {
"copyfiles": "^0.2.1",
"happen": "~0.2.0",
"eslint": "^3.5.0 <3.6.0",
"eslint-config-mourner": "^2.0.1",
"git-rev": "^0.2.1",
"happen": "~0.3.1",
"jake": "~8.0.12", "jake": "~8.0.12",
"jshint": "~2.8.0",
"karma": "~0.13.14",
"karma-chrome-launcher": "^0.2.1",
"karma-coverage": "~0.5.3",
"karma-mocha": "~0.2.0",
"karma-phantomjs-launcher": "^0.2.1",
"mocha": "~2.3.3",
"tin": "^0.5.0",
"uglify-js": "~2.5.0"
"karma": "^1.3.0",
"karma-chrome-launcher": "^2.0.0",
"karma-coverage": "~1.1.1",
"karma-firefox-launcher": "~1.0.0",
"karma-mocha": "^1.2.0",
"karma-phantomjs-launcher": "^1.0.2",
"karma-safari-launcher": "~1.0.0",
"leafdoc": "^1.4.1",
"mocha": "^3.1.0",
"phantomjs-prebuilt": "^2.1.12",
"prosthetic-hand": "^1.3.1",
"source-map": "^0.5.6",
"uglify-js": "~2.7.3"
}, },
"main": "dist/leaflet-src.js", "main": "dist/leaflet-src.js",
"style": "dist/leaflet.css",
"scripts": { "scripts": {
"test": "jake test", "test": "jake test",
"build": "jake build", "build": "jake build",
"release": "./build/publish.sh" "release": "./build/publish.sh"
}, },
"eslintConfig": {
"root": true,
"globals": {
"L": true
},
"env": {
"commonjs": true,
"amd": true,
"node": false
},
"extends": "mourner",
"rules": {
"no-mixed-spaces-and-tabs": [
2,
"smart-tabs"
],
"indent": [
2,
"tab",
{
"VariableDeclarator": 0
}
],
"curly": 2,
"spaced-comment": 2,
"strict": 0,
"wrap-iife": 0,
"key-spacing": 0,
"consistent-return": 0
}
},
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git://github.com/Leaflet/Leaflet.git" "url": "git://github.com/Leaflet/Leaflet.git"
"keywords": [ "keywords": [
"gis", "gis",
"map" "map"
]
],
"license": "BSD-2-Clause"
} }

+ 1
- 0
vendor/composer/autoload_namespaces.php Переглянути файл

$baseDir = dirname($vendorDir); $baseDir = dirname($vendorDir);


return array( return array(
'yii\\image\\' => array($vendorDir . '/yurkinx/yii2-image'),
'HTMLPurifier' => array($vendorDir . '/ezyang/htmlpurifier/library'), 'HTMLPurifier' => array($vendorDir . '/ezyang/htmlpurifier/library'),
'Diff' => array($vendorDir . '/phpspec/php-diff/lib'), 'Diff' => array($vendorDir . '/phpspec/php-diff/lib'),
); );

+ 412
- 365
vendor/composer/installed.json Переглянути файл

}, },
"installation-source": "dist" "installation-source": "dist"
}, },
{
"name": "yiisoft/yii2-composer",
"version": "2.0.4",
"version_normalized": "2.0.4.0",
"source": {
"type": "git",
"url": "https://github.com/yiisoft/yii2-composer.git",
"reference": "7452fd908a5023b8bb5ea1b123a174ca080de464"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/7452fd908a5023b8bb5ea1b123a174ca080de464",
"reference": "7452fd908a5023b8bb5ea1b123a174ca080de464",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.0"
},
"time": "2016-02-06 00:49:24",
"type": "composer-plugin",
"extra": {
"class": "yii\\composer\\Plugin",
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"installation-source": "dist",
"autoload": {
"psr-4": {
"yii\\composer\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Qiang Xue",
"email": "qiang.xue@gmail.com"
}
],
"description": "The composer plugin for Yii extension installer",
"keywords": [
"composer",
"extension installer",
"yii2"
]
},
{
"name": "swiftmailer/swiftmailer",
"version": "v5.4.3",
"version_normalized": "5.4.3.0",
"source": {
"type": "git",
"url": "https://github.com/swiftmailer/swiftmailer.git",
"reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/4cc92842069c2bbc1f28daaaf1d2576ec4dfe153",
"reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
"mockery/mockery": "~0.9.1"
},
"time": "2016-07-08 11:51:25",
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "5.4-dev"
}
},
"installation-source": "dist",
"autoload": {
"files": [
"lib/swift_required.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Chris Corbyn"
},
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "Swiftmailer, free feature-rich PHP mailer",
"homepage": "http://swiftmailer.org",
"keywords": [
"email",
"mail",
"mailer"
]
},
{ {
"name": "bower-asset/jquery", "name": "bower-asset/jquery",
"version": "2.2.4", "version": "2.2.4",
"yii2" "yii2"
] ]
}, },
{
"name": "yiisoft/yii2-debug",
"version": "2.0.6",
"version_normalized": "2.0.6.0",
"source": {
"type": "git",
"url": "https://github.com/yiisoft/yii2-debug.git",
"reference": "55ed2e853ed8050a34415f63a4da84f88a56f895"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/55ed2e853ed8050a34415f63a4da84f88a56f895",
"reference": "55ed2e853ed8050a34415f63a4da84f88a56f895",
"shasum": ""
},
"require": {
"yiisoft/yii2": ">=2.0.4",
"yiisoft/yii2-bootstrap": "*"
},
"time": "2016-03-17 03:50:19",
"type": "yii2-extension",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"installation-source": "dist",
"autoload": {
"psr-4": {
"yii\\debug\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Qiang Xue",
"email": "qiang.xue@gmail.com"
}
],
"description": "The debugger extension for the Yii framework",
"keywords": [
"debug",
"debugger",
"yii2"
]
},
{ {
"name": "bower-asset/typeahead.js", "name": "bower-asset/typeahead.js",
"version": "v0.11.1", "version": "v0.11.1",
"fixtures" "fixtures"
] ]
}, },
{
"name": "bower-asset/leaflet",
"version": "v0.7.7",
"version_normalized": "0.7.7.0",
"source": {
"type": "git",
"url": "https://github.com/Leaflet/Leaflet.git",
"reference": "197f9d43b7bbc73c0492bf62cd666a5a98038098"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Leaflet/Leaflet/zipball/197f9d43b7bbc73c0492bf62cd666a5a98038098",
"reference": "197f9d43b7bbc73c0492bf62cd666a5a98038098",
"shasum": ""
},
"type": "bower-asset-library",
"extra": {
"bower-asset-main": [
"dist/leaflet.css",
"dist/leaflet-src.js",
"dist/images/layers-2x.png",
"dist/images/layers.png",
"dist/images/marker-icon-2x.png",
"dist/images/marker-icon.png",
"dist/images/marker-shadow.png"
],
"bower-asset-ignore": [
".*",
"CHANGELOG.json",
"FAQ.md",
"debug",
"spec",
"src",
"build"
]
},
"installation-source": "dist",
"description": "JavaScript library for mobile-friendly interactive maps"
},
{
"name": "2amigos/yii2-leaflet-extension",
"version": "1.0.2",
"version_normalized": "1.0.2.0",
"source": {
"type": "git",
"url": "https://github.com/2amigos/yii2-leaflet-extension.git",
"reference": "05ac1496b0b7a5c7bdeec110a02f0e36d0a91e88"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/2amigos/yii2-leaflet-extension/zipball/05ac1496b0b7a5c7bdeec110a02f0e36d0a91e88",
"reference": "05ac1496b0b7a5c7bdeec110a02f0e36d0a91e88",
"shasum": ""
},
"require": {
"bower-asset/leaflet": "0.7.*@stable",
"yiisoft/yii2": "~2.0.0"
},
"require-dev": {
"phpunit/phpunit": "4.*"
},
"time": "2016-02-05 23:47:38",
"type": "yii2-extension",
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
},
"asset-installer-paths": {
"bower-asset-library": "vendor/bower"
}
},
"installation-source": "dist",
"autoload": {
"psr-4": {
"dosamigos\\leaflet\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "2amigOS! Consulting Group",
"email": "hola@2amigos.us",
"homepage": "http://2amigos.us",
"role": "Developer"
}
],
"description": "LeafLet Mobile-Friendly Interactive Maps Extension Library for Yii2.",
"homepage": "http://yiiwheels.com/extension/leaflet-extension-library",
"keywords": [
"2amigos",
"extension",
"leaflet",
"maps",
"widget",
"yii",
"yii2"
]
},
{ {
"name": "setasign/fpdi", "name": "setasign/fpdi",
"version": "1.6.1", "version": "1.6.1",
] ]
}, },
{ {
"name": "mpdf/mpdf",
"version": "v6.1.2",
"version_normalized": "6.1.2.0",
"name": "yiisoft/yii2",
"version": "2.0.10",
"version_normalized": "2.0.10.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/mpdf/mpdf.git",
"reference": "da078bc2669d3f98553ac41f920ead4c17c951ad"
"url": "https://github.com/yiisoft/yii2-framework.git",
"reference": "5bfcb7a6dfa9771e2248eb8c4448613330f343ff"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/mpdf/mpdf/zipball/da078bc2669d3f98553ac41f920ead4c17c951ad",
"reference": "da078bc2669d3f98553ac41f920ead4c17c951ad",
"url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/5bfcb7a6dfa9771e2248eb8c4448613330f343ff",
"reference": "5bfcb7a6dfa9771e2248eb8c4448613330f343ff",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"bower-asset/jquery": "2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable",
"bower-asset/jquery.inputmask": "~3.2.2",
"bower-asset/punycode": "1.3.*",
"bower-asset/yii2-pjax": "~2.0.1",
"cebe/markdown": "~1.0.0 | ~1.1.0",
"ext-ctype": "*",
"ext-mbstring": "*", "ext-mbstring": "*",
"ezyang/htmlpurifier": "~4.6",
"lib-pcre": "*",
"php": ">=5.4.0", "php": ">=5.4.0",
"setasign/fpdi": "1.6.*"
},
"require-dev": {
"phpunit/phpunit": "^4.7"
},
"suggest": {
"ext-zlib": "Needed for compression of embedded resources, such as fonts"
"yiisoft/yii2-composer": "~2.0.4"
}, },
"time": "2016-07-20 12:31:58",
"time": "2016-10-20 12:02:50",
"bin": [
"yii"
],
"type": "library", "type": "library",
"installation-source": "dist",
"autoload": {
"classmap": [
"mpdf.php",
"classes"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"GPL-2.0"
],
"authors": [
{
"name": "Ian Back",
"role": "Developer"
}
],
"description": "A PHP class to generate PDF files from HTML with Unicode/UTF-8 and CJK support",
"homepage": "http://mpdf.github.io",
"keywords": [
"pdf",
"php",
"utf-8"
]
},
{
"name": "yiisoft/yii2",
"version": "2.0.10",
"version_normalized": "2.0.10.0",
"source": {
"type": "git",
"url": "https://github.com/yiisoft/yii2-framework.git",
"reference": "5bfcb7a6dfa9771e2248eb8c4448613330f343ff"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/5bfcb7a6dfa9771e2248eb8c4448613330f343ff",
"reference": "5bfcb7a6dfa9771e2248eb8c4448613330f343ff",
"shasum": ""
},
"require": {
"bower-asset/jquery": "2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable",
"bower-asset/jquery.inputmask": "~3.2.2",
"bower-asset/punycode": "1.3.*",
"bower-asset/yii2-pjax": "~2.0.1",
"cebe/markdown": "~1.0.0 | ~1.1.0",
"ext-ctype": "*",
"ext-mbstring": "*",
"ezyang/htmlpurifier": "~4.6",
"lib-pcre": "*",
"php": ">=5.4.0",
"yiisoft/yii2-composer": "~2.0.4"
},
"time": "2016-10-20 12:02:50",
"bin": [
"yii"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
"psr-4": { "psr-4": {
] ]
}, },
{ {
"name": "kartik-v/yii2-mpdf",
"name": "c006/yii2-paypal-ipn",
"version": "dev-master", "version": "dev-master",
"version_normalized": "9999999-dev", "version_normalized": "9999999-dev",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/kartik-v/yii2-mpdf.git",
"reference": "94de4fd901036bb086bf86e10509649345b462a0"
"url": "https://github.com/c006/yii2-paypal-ipn.git",
"reference": "992cb6fc6b2beeb8dd61095a7ead7276de328686"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/c006/yii2-paypal-ipn/zipball/992cb6fc6b2beeb8dd61095a7ead7276de328686",
"reference": "992cb6fc6b2beeb8dd61095a7ead7276de328686",
"shasum": ""
},
"time": "2015-08-08 18:07:32",
"type": "yii2-extension",
"installation-source": "source",
"autoload": {
"psr-4": {
"c006\\paypal_ipn\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jon Chambers",
"email": "jchambers.dev@gmail.com"
}
],
"description": "This is a simple PayPal IPN listener, no other files required.",
"keywords": [
"extension",
"ipn",
"paypal",
"yii2"
]
},
{
"name": "yiisoft/yii2-composer",
"version": "2.0.5",
"version_normalized": "2.0.5.0",
"source": {
"type": "git",
"url": "https://github.com/yiisoft/yii2-composer.git",
"reference": "3f4923c2bde6caf3f5b88cc22fdd5770f52f8df2"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/kartik-v/yii2-mpdf/zipball/94de4fd901036bb086bf86e10509649345b462a0",
"reference": "94de4fd901036bb086bf86e10509649345b462a0",
"url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/3f4923c2bde6caf3f5b88cc22fdd5770f52f8df2",
"reference": "3f4923c2bde6caf3f5b88cc22fdd5770f52f8df2",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"mpdf/mpdf": "<7.0"
"composer-plugin-api": "^1.0"
},
"require-dev": {
"composer/composer": "^1.0"
},
"time": "2016-12-20 13:26:02",
"type": "composer-plugin",
"extra": {
"class": "yii\\composer\\Plugin",
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"installation-source": "dist",
"autoload": {
"psr-4": {
"yii\\composer\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Qiang Xue",
"email": "qiang.xue@gmail.com"
}
],
"description": "The composer plugin for Yii extension installer",
"keywords": [
"composer",
"extension installer",
"yii2"
]
},
{
"name": "bower-asset/leaflet",
"version": "v1.0.3",
"version_normalized": "1.0.3.0",
"source": {
"type": "git",
"url": "https://github.com/Leaflet/Leaflet.git",
"reference": "ed36a04aefd12cb92c78074fe63a8e460db1d464"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Leaflet/Leaflet/zipball/ed36a04aefd12cb92c78074fe63a8e460db1d464",
"reference": "ed36a04aefd12cb92c78074fe63a8e460db1d464",
"shasum": ""
},
"type": "bower-asset-library",
"extra": {
"bower-asset-main": [
"dist/leaflet.css",
"dist/leaflet-src.js"
],
"bower-asset-ignore": [
".*",
"CHANGELOG.json",
"FAQ.md",
"debug",
"spec",
"src",
"build"
]
},
"installation-source": "dist",
"license": [
"BSD-2-Clause"
],
"description": "JavaScript library for mobile-friendly interactive maps"
},
{
"name": "2amigos/yii2-leaflet-extension",
"version": "1.0.3",
"version_normalized": "1.0.3.0",
"source": {
"type": "git",
"url": "https://github.com/2amigos/yii2-leaflet-extension.git",
"reference": "acaea5a6c33db1e4d9dbed040d7ad87c915928d4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/2amigos/yii2-leaflet-extension/zipball/acaea5a6c33db1e4d9dbed040d7ad87c915928d4",
"reference": "acaea5a6c33db1e4d9dbed040d7ad87c915928d4",
"shasum": ""
},
"require": {
"bower-asset/leaflet": "^1.0",
"yiisoft/yii2": "^2.0"
},
"require-dev": {
"phpunit/phpunit": "4.*"
}, },
"time": "2016-11-03 17:25:48",
"time": "2016-12-06 14:54:20",
"type": "yii2-extension", "type": "yii2-extension",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.0.x-dev"
"dev-master": "1.0-dev"
},
"asset-installer-paths": {
"bower-asset-library": "vendor/bower"
} }
}, },
"installation-source": "source",
"installation-source": "dist",
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"kartik\\mpdf\\": ""
"dosamigos\\leaflet\\": "src"
} }
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
"BSD 3-Clause"
"BSD-3-Clause"
], ],
"authors": [ "authors": [
{ {
"name": "Kartik Visweswaran",
"email": "kartikv2@gmail.com",
"homepage": "http://www.krajee.com/"
"name": "2amigOS! Consulting Group",
"email": "hola@2amigos.us",
"homepage": "http://2amigos.us",
"role": "Developer"
} }
], ],
"description": "A Yii2 wrapper component for the mPDF library which generates PDF files from UTF-8 encoded HTML.",
"homepage": "https://github.com/kartik-v/yii2-mpdf",
"description": "LeafLet Mobile-Friendly Interactive Maps Extension Library for Yii2.",
"homepage": "http://yiiwheels.com/extension/leaflet-extension-library",
"keywords": [ "keywords": [
"component",
"2amigos",
"extension", "extension",
"html",
"mpdf",
"leaflet",
"maps",
"widget",
"yii",
"yii2"
]
},
{
"name": "yiisoft/yii2-debug",
"version": "2.0.7",
"version_normalized": "2.0.7.0",
"source": {
"type": "git",
"url": "https://github.com/yiisoft/yii2-debug.git",
"reference": "a74a2433ad1dfda30a253a92f6db52c131807432"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/a74a2433ad1dfda30a253a92f6db52c131807432",
"reference": "a74a2433ad1dfda30a253a92f6db52c131807432",
"shasum": ""
},
"require": {
"yiisoft/yii2": "~2.0.4",
"yiisoft/yii2-bootstrap": "~2.0.0"
},
"time": "2016-11-24 09:42:29",
"type": "yii2-extension",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"installation-source": "dist",
"autoload": {
"psr-4": {
"yii\\debug\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Qiang Xue",
"email": "qiang.xue@gmail.com"
}
],
"description": "The debugger extension for the Yii framework",
"keywords": [
"debug",
"debugger",
"yii2"
]
},
{
"name": "swiftmailer/swiftmailer",
"version": "v5.4.5",
"version_normalized": "5.4.5.0",
"source": {
"type": "git",
"url": "https://github.com/swiftmailer/swiftmailer.git",
"reference": "cd142238a339459b10da3d8234220963f392540c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/cd142238a339459b10da3d8234220963f392540c",
"reference": "cd142238a339459b10da3d8234220963f392540c",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
"mockery/mockery": "~0.9.1",
"symfony/phpunit-bridge": "~3.2"
},
"time": "2016-12-29 10:02:40",
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "5.4-dev"
}
},
"installation-source": "dist",
"autoload": {
"files": [
"lib/swift_required.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Chris Corbyn"
},
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "Swiftmailer, free feature-rich PHP mailer",
"homepage": "http://swiftmailer.org",
"keywords": [
"email",
"mail",
"mailer"
]
},
{
"name": "mpdf/mpdf",
"version": "v6.1.3",
"version_normalized": "6.1.3.0",
"source": {
"type": "git",
"url": "https://github.com/mpdf/mpdf.git",
"reference": "7f138bf7508eac895ac2c13d2509b056ac7e7e97"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/mpdf/mpdf/zipball/7f138bf7508eac895ac2c13d2509b056ac7e7e97",
"reference": "7f138bf7508eac895ac2c13d2509b056ac7e7e97",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"php": ">=5.4.0",
"setasign/fpdi": "1.6.*"
},
"require-dev": {
"phpunit/phpunit": "^4.7"
},
"suggest": {
"ext-zlib": "Needed for compression of embedded resources, such as fonts"
},
"time": "2016-12-12 10:42:18",
"type": "library",
"installation-source": "dist",
"autoload": {
"classmap": [
"mpdf.php",
"classes"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"GPL-2.0"
],
"authors": [
{
"name": "Ian Back",
"role": "Developer"
}
],
"description": "A PHP class to generate PDF files from HTML with Unicode/UTF-8 and CJK support",
"homepage": "http://mpdf.github.io",
"keywords": [
"pdf", "pdf",
"utf8",
"php",
"utf-8"
]
},
{
"name": "yurkinx/yii2-image",
"version": "dev-master",
"version_normalized": "9999999-dev",
"source": {
"type": "git",
"url": "https://github.com/yurkinx/yii2-image.git",
"reference": "2737b1ef4cefbc4c664892c6b9f29847fcf72c56"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/yurkinx/yii2-image/zipball/2737b1ef4cefbc4c664892c6b9f29847fcf72c56",
"reference": "2737b1ef4cefbc4c664892c6b9f29847fcf72c56",
"shasum": ""
},
"require": {
"php": ">=5.4.0",
"yiisoft/yii2": "*"
},
"time": "2016-12-08 19:34:11",
"type": "yii2-extension",
"installation-source": "source",
"autoload": {
"psr-0": {
"yii\\image\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Yuri Kileev",
"email": "kileev@gmail.com"
}
],
"description": "Yii2 extension for image manipulating using Kohana Image Library.",
"homepage": "https://github.com/yurkinx/yii2-image",
"keywords": [
"extension",
"image",
"yii2" "yii2"
] ]
}, },
{ {
"name": "c006/yii2-paypal-ipn",
"name": "kartik-v/yii2-mpdf",
"version": "dev-master", "version": "dev-master",
"version_normalized": "9999999-dev", "version_normalized": "9999999-dev",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/c006/yii2-paypal-ipn.git",
"reference": "992cb6fc6b2beeb8dd61095a7ead7276de328686"
"url": "https://github.com/kartik-v/yii2-mpdf.git",
"reference": "17fda1cb084c58fee6014026d35af5faf73316ef"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/c006/yii2-paypal-ipn/zipball/992cb6fc6b2beeb8dd61095a7ead7276de328686",
"reference": "992cb6fc6b2beeb8dd61095a7ead7276de328686",
"url": "https://api.github.com/repos/kartik-v/yii2-mpdf/zipball/17fda1cb084c58fee6014026d35af5faf73316ef",
"reference": "17fda1cb084c58fee6014026d35af5faf73316ef",
"shasum": "" "shasum": ""
}, },
"time": "2015-08-08 18:07:32",
"require": {
"mpdf/mpdf": "<7.0"
},
"time": "2017-01-14 11:51:12",
"type": "yii2-extension", "type": "yii2-extension",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"installation-source": "source", "installation-source": "source",
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"c006\\paypal_ipn\\": ""
"kartik\\mpdf\\": ""
} }
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
"MIT"
"BSD 3-Clause"
], ],
"authors": [ "authors": [
{ {
"name": "Jon Chambers",
"email": "jchambers.dev@gmail.com"
"name": "Kartik Visweswaran",
"email": "kartikv2@gmail.com",
"homepage": "http://www.krajee.com/"
} }
], ],
"description": "This is a simple PayPal IPN listener, no other files required.",
"description": "A Yii2 wrapper component for the mPDF library which generates PDF files from UTF-8 encoded HTML.",
"homepage": "https://github.com/kartik-v/yii2-mpdf",
"keywords": [ "keywords": [
"component",
"extension", "extension",
"ipn",
"paypal",
"html",
"mpdf",
"pdf",
"utf8",
"yii2" "yii2"
] ]
} }

+ 1
- 1
vendor/kartik-v/yii2-mpdf

Subproject commit 94de4fd901036bb086bf86e10509649345b462a0
Subproject commit 17fda1cb084c58fee6014026d35af5faf73316ef

+ 2
- 1
vendor/mpdf/mpdf/.gitignore Переглянути файл


vendor/*
composer.lock

+ 1
- 0
vendor/mpdf/mpdf/classes/cssmgr.php Переглянути файл

{ {
$p = array(); $p = array();
$zp = array(); $zp = array();
if (empty($attr)) $attr = array();


$classes = array(); $classes = array();
if (isset($attr['CLASS'])) { if (isset($attr['CLASS'])) {

+ 0
- 9
vendor/mpdf/mpdf/config_fonts.php Переглянути файл

*/ */


$this->fontdata = array( $this->fontdata = array(
"comfortaaregular" => array(
"R" => "comfortaa-regular-webfont.ttf",
),
"comfortaalight" => array(
"R" => "comfortaa-light-webfont.ttf",
),
"myriadpro-regular" => array(
"R" => "myriadpro-regular.ttf",
),
"dejavusanscondensed" => array( "dejavusanscondensed" => array(
'R' => "DejaVuSansCondensed.ttf", 'R' => "DejaVuSansCondensed.ttf",
'B' => "DejaVuSansCondensed-Bold.ttf", 'B' => "DejaVuSansCondensed-Bold.ttf",

+ 1
- 0
vendor/swiftmailer/swiftmailer/.gitignore Переглянути файл

/tests/acceptance.conf.php /tests/acceptance.conf.php
/tests/smoke.conf.php /tests/smoke.conf.php
/build/* /build/*
/vendor/

+ 12
- 1
vendor/swiftmailer/swiftmailer/CHANGES Переглянути файл

Changelog Changelog
========= =========


5.4.5 (2016-XX-XX)
------------------

* fixed CVE-2016-10033 and CVE-2016-10045
* deprecated the mail transport

5.4.4 (2016-11-23)
------------------

* reverted escaping command-line args to mail (PHP mail() function already does it)

5.4.3 (2016-07-08) 5.4.3 (2016-07-08)
------------------ ------------------


* added return-path header to the ignoredHeaders list of DKIMSigner * added return-path header to the ignoredHeaders list of DKIMSigner
* fixed crlf for subject using mail * fixed crlf for subject using mail
* fixed add soft line break only when necessary * fixed add soft line break only when necessary
* fixed escaping command-line args to Sendmail
* fixed escaping command-line args to mail


5.4.1 (2015-06-06) 5.4.1 (2015-06-06)
------------------ ------------------

+ 1
- 1
vendor/swiftmailer/swiftmailer/VERSION Переглянути файл

Swift-5.4.3
Swift-5.4.5-DEV

+ 2
- 1
vendor/swiftmailer/swiftmailer/composer.json Переглянути файл

"php": ">=5.3.3" "php": ">=5.3.3"
}, },
"require-dev": { "require-dev": {
"mockery/mockery": "~0.9.1"
"mockery/mockery": "~0.9.1",
"symfony/phpunit-bridge": "~3.2"
}, },
"autoload": { "autoload": {
"files": ["lib/swift_required.php"] "files": ["lib/swift_required.php"]

+ 10
- 6
vendor/swiftmailer/swiftmailer/doc/messages.rst Переглянути файл

indicative setting for the recipient. indicative setting for the recipient.


The priority of a message is an indication to the recipient what significance The priority of a message is an indication to the recipient what significance
it has. Swift Mailer allows you to set the priority by calling the ``setPriority`` method. This method takes an integer value between 1 and 5:
it has. Swift Mailer allows you to set the priority by calling the
``setPriority`` method. This method takes an integer value between 1 and 5:


* Highest
* High
* Normal
* Low
* Lowest
* `Swift_Mime_SimpleMessage::PRIORITY_HIGHEST`: 1
* `Swift_Mime_SimpleMessage::PRIORITY_HIGH`: 2
* `Swift_Mime_SimpleMessage::PRIORITY_NORMAL`: 3
* `Swift_Mime_SimpleMessage::PRIORITY_LOW`: 4
* `Swift_Mime_SimpleMessage::PRIORITY_LOWEST`: 5


To set the message priority: To set the message priority:




// Indicate "High" priority // Indicate "High" priority
$message->setPriority(2); $message->setPriority(2);

// Or use the constant to be more explicit
$message->setPriority(Swift_Mime_SimpleMessage::PRIORITY_HIGH);

+ 0
- 2
vendor/swiftmailer/swiftmailer/doc/overview.rst Переглянути файл

+---------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+ +---------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+
| ``Swift_SendmailTransport`` | Communicates with a locally installed ``sendmail`` executable (Linux/UNIX) | Quick time-to-run; Provides less-accurate feedback than SMTP; Requires ``sendmail`` installation | | ``Swift_SendmailTransport`` | Communicates with a locally installed ``sendmail`` executable (Linux/UNIX) | Quick time-to-run; Provides less-accurate feedback than SMTP; Requires ``sendmail`` installation |
+---------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+ +---------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+
| ``Swift_MailTransport`` | Uses PHP's built-in ``mail()`` function | Very portable; Potentially unpredictable results; Provides extremely weak feedback |
+---------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+
| ``Swift_LoadBalancedTransport`` | Cycles through a collection of the other Transports to manage load-reduction | Provides graceful fallback if one Transport fails (e.g. an SMTP server is down); Keeps the load on remote services down by spreading the work | | ``Swift_LoadBalancedTransport`` | Cycles through a collection of the other Transports to manage load-reduction | Provides graceful fallback if one Transport fails (e.g. an SMTP server is down); Keeps the load on remote services down by spreading the work |
+---------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+ +---------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+
| ``Swift_FailoverTransport`` | Works in conjunction with a collection of the other Transports to provide high-availability | Provides graceful fallback if one Transport fails (e.g. an SMTP server is down) | | ``Swift_FailoverTransport`` | Works in conjunction with a collection of the other Transports to provide high-availability | Provides graceful fallback if one Transport fails (e.g. an SMTP server is down) |

+ 4
- 40
vendor/swiftmailer/swiftmailer/doc/sending.rst Переглянути файл

To send a Message: To send a Message:


* Create a Transport from one of the provided Transports -- * Create a Transport from one of the provided Transports --
``Swift_SmtpTransport``, ``Swift_SendmailTransport``, ``Swift_MailTransport``
``Swift_SmtpTransport``, ``Swift_SendmailTransport``
or one of the aggregate Transports. or one of the aggregate Transports.


* Create an instance of the ``Swift_Mailer`` class, using the Transport as * Create an instance of the ``Swift_Mailer`` class, using the Transport as
; ;


/* /*
You could alternatively use a different transport such as Sendmail or Mail:
You could alternatively use a different transport such as Sendmail:


// Sendmail // Sendmail
$transport = Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs'); $transport = Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs');

// Mail
$transport = Swift_MailTransport::newInstance();
*/ */


// Create the Mailer using your created Transport // Create the Mailer using your created Transport


It's a last resort, and we say that with a passion! It's a last resort, and we say that with a passion!


Using the Mail Transport
^^^^^^^^^^^^^^^^^^^^^^^^

To use the Mail Transport you simply need to call
``Swift_MailTransport::newInstance()``. It's unlikely you'll need to configure
the Transport.

To use the Mail Transport:

* Call ``Swift_MailTransport::newInstance()``.

* Use the returned object to create the Mailer.

Messages will be sent using the ``mail()`` function.

.. note::

The ``mail()`` function can take a ``$additional_parameters`` parameter.
Swift Mailer sets this to "``-f%s``" by default, where the "``%s``" is
substituted with the address of the sender (via a ``sprintf()``) at send
time. You may override this default by passing an argument to
``newInstance()``.

.. code-block:: php

require_once 'lib/swift_required.php';

// Create the Transport
$transport = Swift_MailTransport::newInstance();

// Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);

Available Methods for Sending Messages Available Methods for Sending Messages
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~




* Create a Transport from one of the provided Transports -- * Create a Transport from one of the provided Transports --
``Swift_SmtpTransport``, ``Swift_SendmailTransport``, ``Swift_SmtpTransport``, ``Swift_SendmailTransport``,
``Swift_MailTransport`` or one of the aggregate Transports.
or one of the aggregate Transports.


* Create an instance of the ``Swift_Mailer`` class, using the Transport as * Create an instance of the ``Swift_Mailer`` class, using the Transport as
it's constructor parameter. it's constructor parameter.


* Create a Transport from one of the provided Transports -- * Create a Transport from one of the provided Transports --
``Swift_SmtpTransport``, ``Swift_SendmailTransport``, ``Swift_SmtpTransport``, ``Swift_SendmailTransport``,
``Swift_MailTransport`` or one of the aggregate Transports.
or one of the aggregate Transports.


* Create an instance of the ``Swift_Mailer`` class, using the Transport as * Create an instance of the ``Swift_Mailer`` class, using the Transport as
it's constructor parameter. it's constructor parameter.

+ 2
- 0
vendor/swiftmailer/swiftmailer/lib/classes/Swift/MailTransport.php Переглянути файл

* Sends Messages using the mail() function. * Sends Messages using the mail() function.
* *
* @author Chris Corbyn * @author Chris Corbyn
*
* @deprecated since 5.4.5 (to be removed in 6.0)
*/ */
class Swift_MailTransport extends Swift_Transport_MailTransport class Swift_MailTransport extends Swift_Transport_MailTransport
{ {

+ 7
- 7
vendor/swiftmailer/swiftmailer/lib/classes/Swift/Message.php Переглянути файл

* @param string $contentType * @param string $contentType
* @param string $charset * @param string $charset
* *
* @return Swift_Message
* @return $this
*/ */
public static function newInstance($subject = null, $body = null, $contentType = null, $charset = null) public static function newInstance($subject = null, $body = null, $contentType = null, $charset = null)
{ {
* @param string $contentType * @param string $contentType
* @param string $charset * @param string $charset
* *
* @return Swift_Mime_SimpleMessage
* @return $this
*/ */
public function addPart($body, $contentType = null, $charset = null) public function addPart($body, $contentType = null, $charset = null)
{ {
} }


/** /**
* Attach a new signature handler to the message.
* Detach a signature handler from a message.
* *
* @param Swift_Signer $signer * @param Swift_Signer $signer
* *
* @return Swift_Message
* @return $this
*/ */
public function attachSigner(Swift_Signer $signer) public function attachSigner(Swift_Signer $signer)
{ {
* *
* @param Swift_Signer $signer * @param Swift_Signer $signer
* *
* @return Swift_Message
* @return $this
*/ */
public function detachSigner(Swift_Signer $signer) public function detachSigner(Swift_Signer $signer)
{ {
{ {
parent::__clone(); parent::__clone();
foreach ($this->bodySigners as $key => $bodySigner) { foreach ($this->bodySigners as $key => $bodySigner) {
$this->bodySigners[$key] = clone($bodySigner);
$this->bodySigners[$key] = clone $bodySigner;
} }


foreach ($this->headerSigners as $key => $headerSigner) { foreach ($this->headerSigners as $key => $headerSigner) {
$this->headerSigners[$key] = clone($headerSigner);
$this->headerSigners[$key] = clone $headerSigner;
} }
} }
} }

+ 1
- 1
vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php Переглянути файл

* Redefine the encoding requirements for mailboxes. * Redefine the encoding requirements for mailboxes.
* *
* All "specials" must be encoded as the full header value will not be quoted * All "specials" must be encoded as the full header value will not be quoted
*
*
* @see RFC 2822 3.2.1 * @see RFC 2822 3.2.1
* *
* @param string $token * @param string $token

+ 1
- 5
vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php Переглянути файл

private $_fieldName; private $_fieldName;


/** /**
* Creates a new SimpleHeader with $name.
*
* @param string $name
* @param Swift_Mime_HeaderEncoder $encoder
* @param Swift_Mime_Grammar $grammar
* @param string $name
*/ */
public function __construct($name) public function __construct($name)
{ {

+ 29
- 23
vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php Переглянути файл

*/ */
class Swift_Mime_SimpleMessage extends Swift_Mime_MimePart implements Swift_Mime_Message class Swift_Mime_SimpleMessage extends Swift_Mime_MimePart implements Swift_Mime_Message
{ {
const PRIORITY_HIGHEST = 1;
const PRIORITY_HIGH = 2;
const PRIORITY_NORMAL = 3;
const PRIORITY_LOW = 4;
const PRIORITY_LOWEST = 5;

/** /**
* Create a new SimpleMessage with $headers, $encoder and $cache. * Create a new SimpleMessage with $headers, $encoder and $cache.
* *
* *
* @param string $subject * @param string $subject
* *
* @return Swift_Mime_SimpleMessage
* @return $this
*/ */
public function setSubject($subject) public function setSubject($subject)
{ {
* *
* @param int $date * @param int $date
* *
* @return Swift_Mime_SimpleMessage
* @return $this
*/ */
public function setDate($date) public function setDate($date)
{ {
* *
* @param string $address * @param string $address
* *
* @return Swift_Mime_SimpleMessage
* @return $this
*/ */
public function setReturnPath($address) public function setReturnPath($address)
{ {
* @param string $address * @param string $address
* @param string $name optional * @param string $name optional
* *
* @return Swift_Mime_SimpleMessage
* @return $this
*/ */
public function setSender($address, $name = null) public function setSender($address, $name = null)
{ {
* @param string $address * @param string $address
* @param string $name optional * @param string $name optional
* *
* @return Swift_Mime_SimpleMessage
* @return $this
*/ */
public function addFrom($address, $name = null) public function addFrom($address, $name = null)
{ {
* @param string|array $addresses * @param string|array $addresses
* @param string $name optional * @param string $name optional
* *
* @return Swift_Mime_SimpleMessage
* @return $this
*/ */
public function setFrom($addresses, $name = null) public function setFrom($addresses, $name = null)
{ {
* @param string $address * @param string $address
* @param string $name optional * @param string $name optional
* *
* @return Swift_Mime_SimpleMessage
* @return $this
*/ */
public function addReplyTo($address, $name = null) public function addReplyTo($address, $name = null)
{ {
* @param mixed $addresses * @param mixed $addresses
* @param string $name optional * @param string $name optional
* *
* @return Swift_Mime_SimpleMessage
* @return $this
*/ */
public function setReplyTo($addresses, $name = null) public function setReplyTo($addresses, $name = null)
{ {
* @param string $address * @param string $address
* @param string $name optional * @param string $name optional
* *
* @return Swift_Mime_SimpleMessage
* @return $this
*/ */
public function addTo($address, $name = null) public function addTo($address, $name = null)
{ {
* @param mixed $addresses * @param mixed $addresses
* @param string $name optional * @param string $name optional
* *
* @return Swift_Mime_SimpleMessage
* @return $this
*/ */
public function setTo($addresses, $name = null) public function setTo($addresses, $name = null)
{ {
* @param string $address * @param string $address
* @param string $name optional * @param string $name optional
* *
* @return Swift_Mime_SimpleMessage
* @return $this
*/ */
public function addCc($address, $name = null) public function addCc($address, $name = null)
{ {
* @param mixed $addresses * @param mixed $addresses
* @param string $name optional * @param string $name optional
* *
* @return Swift_Mime_SimpleMessage
* @return $this
*/ */
public function setCc($addresses, $name = null) public function setCc($addresses, $name = null)
{ {
* @param string $address * @param string $address
* @param string $name optional * @param string $name optional
* *
* @return Swift_Mime_SimpleMessage
* @return $this
*/ */
public function addBcc($address, $name = null) public function addBcc($address, $name = null)
{ {
* @param mixed $addresses * @param mixed $addresses
* @param string $name optional * @param string $name optional
* *
* @return Swift_Mime_SimpleMessage
* @return $this
*/ */
public function setBcc($addresses, $name = null) public function setBcc($addresses, $name = null)
{ {
* *
* @param int $priority * @param int $priority
* *
* @return Swift_Mime_SimpleMessage
* @return $this
*/ */
public function setPriority($priority) public function setPriority($priority)
{ {
$priorityMap = array( $priorityMap = array(
1 => 'Highest',
2 => 'High',
3 => 'Normal',
4 => 'Low',
5 => 'Lowest',
self::PRIORITY_HIGHEST => 'Highest',
self::PRIORITY_HIGH => 'High',
self::PRIORITY_NORMAL => 'Normal',
self::PRIORITY_LOW => 'Low',
self::PRIORITY_LOWEST => 'Lowest',
); );
$pMapKeys = array_keys($priorityMap); $pMapKeys = array_keys($priorityMap);
if ($priority > max($pMapKeys)) { if ($priority > max($pMapKeys)) {
* *
* @param array $addresses * @param array $addresses
* *
* @return Swift_Mime_SimpleMessage
* @return $this
*/ */
public function setReadReceiptTo($addresses) public function setReadReceiptTo($addresses)
{ {
* *
* @param Swift_Mime_MimeEntity $entity * @param Swift_Mime_MimeEntity $entity
* *
* @return Swift_Mime_SimpleMessage
* @return $this
*/ */
public function attach(Swift_Mime_MimeEntity $entity) public function attach(Swift_Mime_MimeEntity $entity)
{ {
* *
* @param Swift_Mime_MimeEntity $entity * @param Swift_Mime_MimeEntity $entity
* *
* @return Swift_Mime_SimpleMessage
* @return $this
*/ */
public function detach(Swift_Mime_MimeEntity $entity) public function detach(Swift_Mime_MimeEntity $entity)
{ {

+ 8
- 8
vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php Переглянути файл

* *
* @param string $type * @param string $type
* *
* @return Swift_Mime_SimpleMimeEntity
* @return $this
*/ */
public function setContentType($type) public function setContentType($type)
{ {
* *
* @param string $id * @param string $id
* *
* @return Swift_Mime_SimpleMimeEntity
* @return $this
*/ */
public function setId($id) public function setId($id)
{ {
* *
* @param string $description * @param string $description
* *
* @return Swift_Mime_SimpleMimeEntity
* @return $this
*/ */
public function setDescription($description) public function setDescription($description)
{ {
* *
* @param int $length * @param int $length
* *
* @return Swift_Mime_SimpleMimeEntity
* @return $this
*/ */
public function setMaxLineLength($length) public function setMaxLineLength($length)
{ {
* @param Swift_Mime_MimeEntity[] $children * @param Swift_Mime_MimeEntity[] $children
* @param int $compoundLevel For internal use only * @param int $compoundLevel For internal use only
* *
* @return Swift_Mime_SimpleMimeEntity
* @return $this
*/ */
public function setChildren(array $children, $compoundLevel = null) public function setChildren(array $children, $compoundLevel = null)
{ {
* @param mixed $body * @param mixed $body
* @param string $contentType optional * @param string $contentType optional
* *
* @return Swift_Mime_SimpleMimeEntity
* @return $this
*/ */
public function setBody($body, $contentType = null) public function setBody($body, $contentType = null)
{ {
* *
* @param Swift_Mime_ContentEncoder $encoder * @param Swift_Mime_ContentEncoder $encoder
* *
* @return Swift_Mime_SimpleMimeEntity
* @return $this
*/ */
public function setEncoder(Swift_Mime_ContentEncoder $encoder) public function setEncoder(Swift_Mime_ContentEncoder $encoder)
{ {
* *
* @throws Swift_RfcComplianceException * @throws Swift_RfcComplianceException
* *
* @return Swift_Mime_SimpleMimeEntity
* @return $this
*/ */
public function setBoundary($boundary) public function setBoundary($boundary)
{ {

+ 4
- 4
vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php Переглянути файл

$duration = $time - $this->_start; $duration = $time - $this->_start;


switch ($this->_mode) { switch ($this->_mode) {
case self::BYTES_PER_MINUTE :
case self::BYTES_PER_MINUTE:
$sleep = $this->_throttleBytesPerMinute($duration); $sleep = $this->_throttleBytesPerMinute($duration);
break; break;
case self::MESSAGES_PER_SECOND :
case self::MESSAGES_PER_SECOND:
$sleep = $this->_throttleMessagesPerSecond($duration); $sleep = $this->_throttleMessagesPerSecond($duration);
break; break;
case self::MESSAGES_PER_MINUTE :
case self::MESSAGES_PER_MINUTE:
$sleep = $this->_throttleMessagesPerMinute($duration); $sleep = $this->_throttleMessagesPerMinute($duration);
break; break;
default :
default:
$sleep = 0; $sleep = 0;
break; break;
} }

+ 9
- 9
vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php Переглянути файл

{ {
// Init // Init
switch ($this->_hashAlgorithm) { switch ($this->_hashAlgorithm) {
case 'rsa-sha256' :
case 'rsa-sha256':
$this->_bodyHashHandler = hash_init('sha256'); $this->_bodyHashHandler = hash_init('sha256');
break; break;
case 'rsa-sha1' :
case 'rsa-sha1':
$this->_bodyHashHandler = hash_init('sha1'); $this->_bodyHashHandler = hash_init('sha1');
break; break;
} }
protected function _addHeader($header, $is_sig = false) protected function _addHeader($header, $is_sig = false)
{ {
switch ($this->_headerCanon) { switch ($this->_headerCanon) {
case 'relaxed' :
case 'relaxed':
// Prepare Header and cascade // Prepare Header and cascade
$exploded = explode(':', $header, 2); $exploded = explode(':', $header, 2);
$name = strtolower(trim($exploded[0])); $name = strtolower(trim($exploded[0]));
$value = str_replace("\r\n", '', $exploded[1]); $value = str_replace("\r\n", '', $exploded[1]);
$value = preg_replace("/[ \t][ \t]+/", ' ', $value); $value = preg_replace("/[ \t][ \t]+/", ' ', $value);
$header = $name.':'.trim($value).($is_sig ? '' : "\r\n"); $header = $name.':'.trim($value).($is_sig ? '' : "\r\n");
case 'simple' :
case 'simple':
// Nothing to do // Nothing to do
} }
$this->_addToHeaderHash($header); $this->_addToHeaderHash($header);
continue; continue;
} }
switch ($string[$i]) { switch ($string[$i]) {
case "\r" :
case "\r":
$this->_bodyCanonLastChar = "\r"; $this->_bodyCanonLastChar = "\r";
break; break;
case "\n" :
case "\n":
if ($this->_bodyCanonLastChar == "\r") { if ($this->_bodyCanonLastChar == "\r") {
if ($method) { if ($method) {
$this->_bodyCanonSpace = false; $this->_bodyCanonSpace = false;
// todo handle it but should never happen // todo handle it but should never happen
} }
break; break;
case ' ' :
case "\t" :
case ' ':
case "\t":
if ($method) { if ($method) {
$this->_bodyCanonSpace = true; $this->_bodyCanonSpace = true;
break; break;
} }
default :
default:
if ($this->_bodyCanonEmptyCounter > 0) { if ($this->_bodyCanonEmptyCounter > 0) {
$canon .= str_repeat("\r\n", $this->_bodyCanonEmptyCounter); $canon .= str_repeat("\r\n", $this->_bodyCanonEmptyCounter);
$this->_bodyCanonEmptyCounter = 0; $this->_bodyCanonEmptyCounter = 0;

+ 8
- 8
vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php Переглянути файл

protected function _addHeader($header) protected function _addHeader($header)
{ {
switch ($this->_canon) { switch ($this->_canon) {
case 'nofws' :
case 'nofws':
// Prepare Header and cascade // Prepare Header and cascade
$exploded = explode(':', $header, 2); $exploded = explode(':', $header, 2);
$name = strtolower(trim($exploded[0])); $name = strtolower(trim($exploded[0]));
$value = str_replace("\r\n", '', $exploded[1]); $value = str_replace("\r\n", '', $exploded[1]);
$value = preg_replace("/[ \t][ \t]+/", ' ', $value); $value = preg_replace("/[ \t][ \t]+/", ' ', $value);
$header = $name.':'.trim($value)."\r\n"; $header = $name.':'.trim($value)."\r\n";
case 'simple' :
case 'simple':
// Nothing to do // Nothing to do
} }
$this->_addToHash($header); $this->_addToHash($header);
continue; continue;
} }
switch ($string[$i]) { switch ($string[$i]) {
case "\r" :
case "\r":
$this->_bodyCanonLastChar = "\r"; $this->_bodyCanonLastChar = "\r";
break; break;
case "\n" :
case "\n":
if ($this->_bodyCanonLastChar == "\r") { if ($this->_bodyCanonLastChar == "\r") {
if ($nofws) { if ($nofws) {
$this->_bodyCanonSpace = false; $this->_bodyCanonSpace = false;
throw new Swift_SwiftException('Invalid new line sequence in mail found \n without preceding \r'); throw new Swift_SwiftException('Invalid new line sequence in mail found \n without preceding \r');
} }
break; break;
case ' ' :
case "\t" :
case ' ':
case "\t":
case "\x09": //HTAB case "\x09": //HTAB
if ($nofws) { if ($nofws) {
$this->_bodyCanonSpace = true; $this->_bodyCanonSpace = true;
break; break;
} }
default :
default:
if ($this->_bodyCanonEmptyCounter > 0) { if ($this->_bodyCanonEmptyCounter > 0) {
$canon .= str_repeat("\r\n", $this->_bodyCanonEmptyCounter); $canon .= str_repeat("\r\n", $this->_bodyCanonEmptyCounter);
$this->_bodyCanonEmptyCounter = 0; $this->_bodyCanonEmptyCounter = 0;
{ {
// Init // Init
switch ($this->_hashAlgorithm) { switch ($this->_hashAlgorithm) {
case 'rsa-sha1' :
case 'rsa-sha1':
$this->_hashHandler = hash_init('sha1'); $this->_hashHandler = hash_init('sha1');
break; break;
} }

+ 1
- 0
vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php Переглянути файл



$newBuffer = array(); $newBuffer = array();
$buf_size = count($buffer); $buf_size = count($buffer);
$last_size = 0;
for ($i = 0; $i < $buf_size; ++$i) { for ($i = 0; $i < $buf_size; ++$i) {
$search_pos = $this->_tree; $search_pos = $this->_tree;
$last_found = PHP_INT_MAX; $last_found = PHP_INT_MAX;

+ 1
- 1
vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php Переглянути файл

} }


if (!function_exists('bcmul')) { if (!function_exists('bcmul')) {
throw new LogicException('The BCMatch functions must be enabled to use the NTLM authenticator.');
throw new LogicException('The BCMath functions must be enabled to use the NTLM authenticator.');
} }


try { try {

+ 1
- 1
vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php Переглянути файл

*/ */
public function setEncryption($encryption) public function setEncryption($encryption)
{ {
$encryption = strtolower($encryption);
$encryption = strtolower($encryption);
if ('tls' == $encryption) { if ('tls' == $encryption) {
$this->_params['protocol'] = 'tcp'; $this->_params['protocol'] = 'tcp';
$this->_params['tls'] = true; $this->_params['tls'] = true;

+ 39
- 1
vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/MailTransport.php Переглянути файл

* all-or-nothing result from sending. * all-or-nothing result from sending.
* *
* @author Chris Corbyn * @author Chris Corbyn
*
* @deprecated since 5.4.5 (to be removed in 6.0)
*/ */
class Swift_Transport_MailTransport implements Swift_Transport class Swift_Transport_MailTransport implements Swift_Transport
{ {
*/ */
public function __construct(Swift_Transport_MailInvoker $invoker, Swift_Events_EventDispatcher $eventDispatcher) public function __construct(Swift_Transport_MailInvoker $invoker, Swift_Events_EventDispatcher $eventDispatcher)
{ {
@trigger_error(sprintf('The %s class is deprecated since version 5.4.5 and will be removed in 6.0. Use the Sendmail or SMTP transport instead.', __CLASS__), E_USER_DEPRECATED);

$this->_invoker = $invoker; $this->_invoker = $invoker;
$this->_eventDispatcher = $eventDispatcher; $this->_eventDispatcher = $eventDispatcher;
} }
return $path; return $path;
} }


/**
* Fix CVE-2016-10074 by disallowing potentially unsafe shell characters.
*
* Note that escapeshellarg and escapeshellcmd are inadequate for our purposes, especially on Windows.
*
* @param string $string The string to be validated
*
* @return bool
*/
private function _isShellSafe($string)
{
// Future-proof
if (escapeshellcmd($string) !== $string || !in_array(escapeshellarg($string), array("'$string'", "\"$string\""))) {
return false;
}

$length = strlen($string);
for ($i = 0; $i < $length; ++$i) {
$c = $string[$i];
// All other characters have a special meaning in at least one common shell, including = and +.
// Full stop (.) has a special meaning in cmd.exe, but its impact should be negligible here.
// Note that this does permit non-Latin alphanumeric characters based on the current locale.
if (!ctype_alnum($c) && strpos('@_-.', $c) === false) {
return false;
}
}

return true;
}

/** /**
* Return php mail extra params to use for invoker->mail. * Return php mail extra params to use for invoker->mail.
* *
private function _formatExtraParams($extraParams, $reversePath) private function _formatExtraParams($extraParams, $reversePath)
{ {
if (false !== strpos($extraParams, '-f%s')) { if (false !== strpos($extraParams, '-f%s')) {
$extraParams = empty($reversePath) ? str_replace('-f%s', '', $extraParams) : sprintf($extraParams, escapeshellarg($reversePath));
if (empty($reversePath) || false === $this->_isShellSafe($reversePath)) {
$extraParams = str_replace('-f%s', '', $extraParams);
} else {
$extraParams = sprintf($extraParams, $reversePath);
}
} }


return !empty($extraParams) ? $extraParams : null; return !empty($extraParams) ? $extraParams : null;

+ 3
- 1
vendor/swiftmailer/swiftmailer/phpunit.xml.dist Переглянути файл

<ini name="intl.default_locale" value="en"/> <ini name="intl.default_locale" value="en"/>
<ini name="intl.error_level" value="0"/> <ini name="intl.error_level" value="0"/>
<ini name="memory_limit" value="-1"/> <ini name="memory_limit" value="-1"/>
<ini name="error_reporting" value="-1" />
</php> </php>


<testsuites> <testsuites>
</testsuites> </testsuites>


<listeners> <listeners>
<listener class="Mockery\Adapter\Phpunit\TestListener"/>
<listener class="Symfony\Bridge\PhpUnit\SymfonyTestsListener" />
<listener class="Mockery\Adapter\Phpunit\TestListener" />
</listeners> </listeners>
</phpunit> </phpunit>

+ 1
- 1
vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/ByteStream/FileByteStreamAcceptanceTest.php Переглянути файл



private function _createMockInputStream() private function _createMockInputStream()
{ {
return $this->getMock('Swift_InputByteStream');
return $this->getMockBuilder('Swift_InputByteStream')->getMock();
} }


private function _createFileStream($file, $writable = false) private function _createFileStream($file, $writable = false)

+ 4
- 0
vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/DependencyContainerAcceptanceTest.php Переглянути файл

$di = Swift_DependencyContainer::getInstance(); $di = Swift_DependencyContainer::getInstance();
foreach ($di->listItems() as $itemName) { foreach ($di->listItems() as $itemName) {
try { try {
// to be removed in 6.0
if ('transport.mail' === $itemName) {
continue;
}
$di->lookup($itemName); $di->lookup($itemName);
} catch (Swift_DependencyException $e) { } catch (Swift_DependencyException $e) {
$this->fail($e->getMessage()); $this->fail($e->getMessage());

+ 3
- 4
vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/AbstractStreamBufferAcceptanceTest.php Переглянути файл

<?php <?php


abstract class Swift_Transport_StreamBuffer_AbstractStreamBufferAcceptanceTest
extends \PHPUnit_Framework_TestCase
abstract class Swift_Transport_StreamBuffer_AbstractStreamBufferAcceptanceTest extends \PHPUnit_Framework_TestCase
{ {
protected $_buffer; protected $_buffer;


} }


$this->_buffer = new Swift_Transport_StreamBuffer( $this->_buffer = new Swift_Transport_StreamBuffer(
$this->getMock('Swift_ReplacementFilterFactory')
$this->getMockBuilder('Swift_ReplacementFilterFactory')->getMock()
); );
} }




private function _createMockInputStream() private function _createMockInputStream()
{ {
return $this->getMock('Swift_InputByteStream');
return $this->getMockBuilder('Swift_InputByteStream')->getMock();
} }
} }

+ 1
- 2
vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/BasicSocketAcceptanceTest.php Переглянути файл



require_once __DIR__.'/AbstractStreamBufferAcceptanceTest.php'; require_once __DIR__.'/AbstractStreamBufferAcceptanceTest.php';


class Swift_Transport_StreamBuffer_BasicSocketAcceptanceTest
extends Swift_Transport_StreamBuffer_AbstractStreamBufferAcceptanceTest
class Swift_Transport_StreamBuffer_BasicSocketAcceptanceTest extends Swift_Transport_StreamBuffer_AbstractStreamBufferAcceptanceTest
{ {
public function setUp() public function setUp()
{ {

+ 1
- 2
vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/ProcessAcceptanceTest.php Переглянути файл



require_once __DIR__.'/AbstractStreamBufferAcceptanceTest.php'; require_once __DIR__.'/AbstractStreamBufferAcceptanceTest.php';


class Swift_Transport_StreamBuffer_ProcessAcceptanceTest
extends Swift_Transport_StreamBuffer_AbstractStreamBufferAcceptanceTest
class Swift_Transport_StreamBuffer_ProcessAcceptanceTest extends Swift_Transport_StreamBuffer_AbstractStreamBufferAcceptanceTest
{ {
public function setUp() public function setUp()
{ {

+ 1
- 1
vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/SocketTimeoutTest.php Переглянути файл

} }


$this->_buffer = new Swift_Transport_StreamBuffer( $this->_buffer = new Swift_Transport_StreamBuffer(
$this->getMock('Swift_ReplacementFilterFactory')
$this->getMockBuilder('Swift_ReplacementFilterFactory')->getMock()
); );
} }



+ 1
- 2
vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/SslSocketAcceptanceTest.php Переглянути файл



require_once __DIR__.'/AbstractStreamBufferAcceptanceTest.php'; require_once __DIR__.'/AbstractStreamBufferAcceptanceTest.php';


class Swift_Transport_StreamBuffer_SslSocketAcceptanceTest
extends Swift_Transport_StreamBuffer_AbstractStreamBufferAcceptanceTest
class Swift_Transport_StreamBuffer_SslSocketAcceptanceTest extends Swift_Transport_StreamBuffer_AbstractStreamBufferAcceptanceTest
{ {
public function setUp() public function setUp()
{ {

+ 1
- 2
vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/TlsSocketAcceptanceTest.php Переглянути файл



require_once __DIR__.'/AbstractStreamBufferAcceptanceTest.php'; require_once __DIR__.'/AbstractStreamBufferAcceptanceTest.php';


class Swift_Transport_StreamBuffer_TlsSocketAcceptanceTest
extends Swift_Transport_StreamBuffer_AbstractStreamBufferAcceptanceTest
class Swift_Transport_StreamBuffer_TlsSocketAcceptanceTest extends Swift_Transport_StreamBuffer_AbstractStreamBufferAcceptanceTest
{ {
public function setUp() public function setUp()
{ {

+ 1
- 1
vendor/swiftmailer/swiftmailer/tests/bug/Swift/BugFileByteStreamConsecutiveReadCallsTest.php Переглянути файл

<?php <?php




class Swift_FileByteStreamConsecutiveReadCalls extends \PHPUnit_Framework_TestCase
class Swift_FileByteStreamConsecutiveReadCalls extends \PHPUnit_Framework_TestCase
{ {
/** /**
* @test * @test

+ 10
- 9
vendor/swiftmailer/swiftmailer/tests/unit/Swift/ByteStream/ArrayByteStreamTest.php Переглянути файл

public function testResettingPointerAfterExhaustion() public function testResettingPointerAfterExhaustion()
{ {
$input = array('a', 'b', 'c'); $input = array('a', 'b', 'c');
$bs = $this->_createArrayStream($input); while (false !== $bs->read(1));
$bs = $this->_createArrayStream($input);
while (false !== $bs->read(1));


$bs->setReadPointer(0); $bs->setReadPointer(0);
$this->assertEquals('a', $bs->read(1), $this->assertEquals('a', $bs->read(1),
$bs = $this->_createArrayStream($input); $bs = $this->_createArrayStream($input);


$bs->setReadPointer(3); $bs->setReadPointer(3);
$this->assertSame(false, $bs->read(1),
$this->assertFalse($bs->read(1),
'%s: Stream should be at end and thus return false' '%s: Stream should be at end and thus return false'
); );
} }


$bs->flushBuffers(); $bs->flushBuffers();


$this->assertSame(false, $bs->read(1),
$this->assertFalse($bs->read(1),
'%s: Contents have been flushed so read() should return false' '%s: Contents have been flushed so read() should return false'
); );
} }
public function testBindingOtherStreamsMirrorsWriteOperations() public function testBindingOtherStreamsMirrorsWriteOperations()
{ {
$bs = $this->_createArrayStream(''); $bs = $this->_createArrayStream('');
$is1 = $this->getMock('Swift_InputByteStream');
$is2 = $this->getMock('Swift_InputByteStream');
$is1 = $this->getMockBuilder('Swift_InputByteStream')->getMock();
$is2 = $this->getMockBuilder('Swift_InputByteStream')->getMock();


$is1->expects($this->at(0)) $is1->expects($this->at(0))
->method('write') ->method('write')
public function testBindingOtherStreamsMirrorsFlushOperations() public function testBindingOtherStreamsMirrorsFlushOperations()
{ {
$bs = $this->_createArrayStream(''); $bs = $this->_createArrayStream('');
$is1 = $this->getMock('Swift_InputByteStream');
$is2 = $this->getMock('Swift_InputByteStream');
$is1 = $this->getMockBuilder('Swift_InputByteStream')->getMock();
$is2 = $this->getMockBuilder('Swift_InputByteStream')->getMock();


$is1->expects($this->once()) $is1->expects($this->once())
->method('flushBuffers'); ->method('flushBuffers');
public function testUnbindingStreamPreventsFurtherWrites() public function testUnbindingStreamPreventsFurtherWrites()
{ {
$bs = $this->_createArrayStream(''); $bs = $this->_createArrayStream('');
$is1 = $this->getMock('Swift_InputByteStream');
$is2 = $this->getMock('Swift_InputByteStream');
$is1 = $this->getMockBuilder('Swift_InputByteStream')->getMock();
$is2 = $this->getMockBuilder('Swift_InputByteStream')->getMock();


$is1->expects($this->at(0)) $is1->expects($this->at(0))
->method('write') ->method('write')

+ 7
- 7
vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterStream/ArrayCharacterStreamTest.php Переглянути файл

); );
$this->assertIdenticalBinary(pack('C*', 0xD1, 0x85), $stream->read(1)); $this->assertIdenticalBinary(pack('C*', 0xD1, 0x85), $stream->read(1));


$this->assertSame(false, $stream->read(1));
$this->assertFalse($stream->read(1));
} }


public function testCharactersCanBeReadAsByteArrays() public function testCharactersCanBeReadAsByteArrays()
); );
$this->assertEquals(array(0xD1, 0x85), $stream->readBytes(1)); $this->assertEquals(array(0xD1, 0x85), $stream->readBytes(1));


$this->assertSame(false, $stream->readBytes(1));
$this->assertFalse($stream->readBytes(1));
} }


public function testRequestingLargeCharCountPastEndOfStream() public function testRequestingLargeCharCountPastEndOfStream()
$stream->read(100) $stream->read(100)
); );


$this->assertSame(false, $stream->read(1));
$this->assertFalse($stream->read(1));
} }


public function testRequestingByteArrayCountPastEndOfStream() public function testRequestingByteArrayCountPastEndOfStream()
$stream->readBytes(100) $stream->readBytes(100)
); );


$this->assertSame(false, $stream->readBytes(1));
$this->assertFalse($stream->readBytes(1));
} }


public function testPointerOffsetCanBeSet() public function testPointerOffsetCanBeSet()


$stream->flushContents(); $stream->flushContents();


$this->assertSame(false, $stream->read(1));
$this->assertFalse($stream->read(1));
} }


public function testByteStreamCanBeImportingUsesValidator() public function testByteStreamCanBeImportingUsesValidator()
$this->assertIdenticalBinary(pack('C*', 0xD0, 0xB6), $stream->read(1)); $this->assertIdenticalBinary(pack('C*', 0xD0, 0xB6), $stream->read(1));
$this->assertIdenticalBinary(pack('C*', 0xD0, 0xBE), $stream->read(1)); $this->assertIdenticalBinary(pack('C*', 0xD0, 0xBE), $stream->read(1));


$this->assertSame(false, $stream->read(1));
$this->assertFalse($stream->read(1));
} }


public function testAlgorithmWithFixedWidthCharsets() public function testAlgorithmWithFixedWidthCharsets()
$this->assertIdenticalBinary(pack('C*', 0xD0, 0xBB), $stream->read(1)); $this->assertIdenticalBinary(pack('C*', 0xD0, 0xBB), $stream->read(1));
$this->assertIdenticalBinary(pack('C*', 0xD0, 0xB0), $stream->read(1)); $this->assertIdenticalBinary(pack('C*', 0xD0, 0xB0), $stream->read(1));


$this->assertSame(false, $stream->read(1));
$this->assertFalse($stream->read(1));
} }


// -- Creation methods // -- Creation methods

+ 2
- 1
vendor/swiftmailer/swiftmailer/tests/unit/Swift/DependencyContainerTest.php Переглянути файл



class One class One
{ {
public $arg1, $arg2;
public $arg1;
public $arg2;
public function __construct($arg1 = null, $arg2 = null) public function __construct($arg1 = null, $arg2 = null)
{ {
$this->arg1 = $arg1; $this->arg1 = $arg1;

+ 1
- 1
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/CommandEventTest.php Переглянути файл



private function _createTransport() private function _createTransport()
{ {
return $this->getMock('Swift_Transport');
return $this->getMockBuilder('Swift_Transport')->getMock();
} }
} }

+ 1
- 1
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/ResponseEventTest.php Переглянути файл



private function _createTransport() private function _createTransport()
{ {
return $this->getMock('Swift_Transport');
return $this->getMockBuilder('Swift_Transport')->getMock();
} }
} }

+ 2
- 2
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/SendEventTest.php Переглянути файл



private function _createTransport() private function _createTransport()
{ {
return $this->getMock('Swift_Transport');
return $this->getMockBuilder('Swift_Transport')->getMock();
} }


private function _createMessage() private function _createMessage()
{ {
return $this->getMock('Swift_Mime_Message');
return $this->getMockBuilder('Swift_Mime_Message')->getMock();
} }
} }

+ 17
- 17
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/SimpleEventDispatcherTest.php Переглянути файл



public function testSendEventCanBeCreated() public function testSendEventCanBeCreated()
{ {
$transport = $this->getMock('Swift_Transport');
$message = $this->getMock('Swift_Mime_Message');
$transport = $this->getMockBuilder('Swift_Transport')->getMock();
$message = $this->getMockBuilder('Swift_Mime_Message')->getMock();
$evt = $this->_dispatcher->createSendEvent($transport, $message); $evt = $this->_dispatcher->createSendEvent($transport, $message);
$this->assertInstanceof('Swift_Events_SendEvent', $evt); $this->assertInstanceof('Swift_Events_SendEvent', $evt);
$this->assertSame($message, $evt->getMessage()); $this->assertSame($message, $evt->getMessage());


public function testCommandEventCanBeCreated() public function testCommandEventCanBeCreated()
{ {
$buf = $this->getMock('Swift_Transport');
$buf = $this->getMockBuilder('Swift_Transport')->getMock();
$evt = $this->_dispatcher->createCommandEvent($buf, "FOO\r\n", array(250)); $evt = $this->_dispatcher->createCommandEvent($buf, "FOO\r\n", array(250));
$this->assertInstanceof('Swift_Events_CommandEvent', $evt); $this->assertInstanceof('Swift_Events_CommandEvent', $evt);
$this->assertSame($buf, $evt->getSource()); $this->assertSame($buf, $evt->getSource());


public function testResponseEventCanBeCreated() public function testResponseEventCanBeCreated()
{ {
$buf = $this->getMock('Swift_Transport');
$buf = $this->getMockBuilder('Swift_Transport')->getMock();
$evt = $this->_dispatcher->createResponseEvent($buf, "250 Ok\r\n", true); $evt = $this->_dispatcher->createResponseEvent($buf, "250 Ok\r\n", true);
$this->assertInstanceof('Swift_Events_ResponseEvent', $evt); $this->assertInstanceof('Swift_Events_ResponseEvent', $evt);
$this->assertSame($buf, $evt->getSource()); $this->assertSame($buf, $evt->getSource());


public function testTransportChangeEventCanBeCreated() public function testTransportChangeEventCanBeCreated()
{ {
$transport = $this->getMock('Swift_Transport');
$transport = $this->getMockBuilder('Swift_Transport')->getMock();
$evt = $this->_dispatcher->createTransportChangeEvent($transport); $evt = $this->_dispatcher->createTransportChangeEvent($transport);
$this->assertInstanceof('Swift_Events_TransportChangeEvent', $evt); $this->assertInstanceof('Swift_Events_TransportChangeEvent', $evt);
$this->assertSame($transport, $evt->getSource()); $this->assertSame($transport, $evt->getSource());


public function testTransportExceptionEventCanBeCreated() public function testTransportExceptionEventCanBeCreated()
{ {
$transport = $this->getMock('Swift_Transport');
$transport = $this->getMockBuilder('Swift_Transport')->getMock();
$ex = new Swift_TransportException(''); $ex = new Swift_TransportException('');
$evt = $this->_dispatcher->createTransportExceptionEvent($transport, $ex); $evt = $this->_dispatcher->createTransportExceptionEvent($transport, $ex);
$this->assertInstanceof('Swift_Events_TransportExceptionEvent', $evt); $this->assertInstanceof('Swift_Events_TransportExceptionEvent', $evt);


public function testListenersAreNotifiedOfDispatchedEvent() public function testListenersAreNotifiedOfDispatchedEvent()
{ {
$transport = $this->getMock('Swift_Transport');
$transport = $this->getMockBuilder('Swift_Transport')->getMock();


$evt = $this->_dispatcher->createTransportChangeEvent($transport); $evt = $this->_dispatcher->createTransportChangeEvent($transport);


$listenerA = $this->getMock('Swift_Events_TransportChangeListener');
$listenerB = $this->getMock('Swift_Events_TransportChangeListener');
$listenerA = $this->getMockBuilder('Swift_Events_TransportChangeListener')->getMock();
$listenerB = $this->getMockBuilder('Swift_Events_TransportChangeListener')->getMock();


$this->_dispatcher->bindEventListener($listenerA); $this->_dispatcher->bindEventListener($listenerA);
$this->_dispatcher->bindEventListener($listenerB); $this->_dispatcher->bindEventListener($listenerB);


public function testListenersAreOnlyCalledIfImplementingCorrectInterface() public function testListenersAreOnlyCalledIfImplementingCorrectInterface()
{ {
$transport = $this->getMock('Swift_Transport');
$message = $this->getMock('Swift_Mime_Message');
$transport = $this->getMockBuilder('Swift_Transport')->getMock();
$message = $this->getMockBuilder('Swift_Mime_Message')->getMock();


$evt = $this->_dispatcher->createSendEvent($transport, $message); $evt = $this->_dispatcher->createSendEvent($transport, $message);


$targetListener = $this->getMock('Swift_Events_SendListener');
$otherListener = $this->getMock('DummyListener');
$targetListener = $this->getMockBuilder('Swift_Events_SendListener')->getMock();
$otherListener = $this->getMockBuilder('DummyListener')->getMock();


$this->_dispatcher->bindEventListener($targetListener); $this->_dispatcher->bindEventListener($targetListener);
$this->_dispatcher->bindEventListener($otherListener); $this->_dispatcher->bindEventListener($otherListener);


public function testListenersCanCancelBubblingOfEvent() public function testListenersCanCancelBubblingOfEvent()
{ {
$transport = $this->getMock('Swift_Transport');
$message = $this->getMock('Swift_Mime_Message');
$transport = $this->getMockBuilder('Swift_Transport')->getMock();
$message = $this->getMockBuilder('Swift_Mime_Message')->getMock();


$evt = $this->_dispatcher->createSendEvent($transport, $message); $evt = $this->_dispatcher->createSendEvent($transport, $message);


$listenerA = $this->getMock('Swift_Events_SendListener');
$listenerB = $this->getMock('Swift_Events_SendListener');
$listenerA = $this->getMockBuilder('Swift_Events_SendListener')->getMock();
$listenerB = $this->getMockBuilder('Swift_Events_SendListener')->getMock();


$this->_dispatcher->bindEventListener($listenerA); $this->_dispatcher->bindEventListener($listenerA);
$this->_dispatcher->bindEventListener($listenerB); $this->_dispatcher->bindEventListener($listenerB);

+ 1
- 1
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/TransportChangeEventTest.php Переглянути файл



private function _createTransport() private function _createTransport()
{ {
return $this->getMock('Swift_Transport');
return $this->getMockBuilder('Swift_Transport')->getMock();
} }
} }

+ 1
- 1
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/TransportExceptionEventTest.php Переглянути файл



private function _createTransport() private function _createTransport()
{ {
return $this->getMock('Swift_Transport');
return $this->getMockBuilder('Swift_Transport')->getMock();
} }


private function _createException() private function _createException()

+ 3
- 3
vendor/swiftmailer/swiftmailer/tests/unit/Swift/KeyCache/ArrayKeyCacheTest.php Переглянути файл



private function _createKeyCacheInputStream() private function _createKeyCacheInputStream()
{ {
return $this->getMock('Swift_KeyCache_KeyCacheInputStream');
return $this->getMockBuilder('Swift_KeyCache_KeyCacheInputStream')->getMock();
} }


private function _createOutputStream() private function _createOutputStream()
{ {
return $this->getMock('Swift_OutputByteStream');
return $this->getMockBuilder('Swift_OutputByteStream')->getMock();
} }


private function _createInputStream() private function _createInputStream()
{ {
return $this->getMock('Swift_InputByteStream');
return $this->getMockBuilder('Swift_InputByteStream')->getMock();
} }
} }

+ 3
- 3
vendor/swiftmailer/swiftmailer/tests/unit/Swift/KeyCache/SimpleKeyCacheInputStreamTest.php Переглянути файл



public function testStreamWritesToCacheInAppendMode() public function testStreamWritesToCacheInAppendMode()
{ {
$cache = $this->getMock('Swift_KeyCache');
$cache = $this->getMockBuilder('Swift_KeyCache')->getMock();
$cache->expects($this->at(0)) $cache->expects($this->at(0))
->method('setString') ->method('setString')
->with($this->_nsKey, 'foo', 'a', Swift_KeyCache::MODE_APPEND); ->with($this->_nsKey, 'foo', 'a', Swift_KeyCache::MODE_APPEND);


public function testFlushContentClearsKey() public function testFlushContentClearsKey()
{ {
$cache = $this->getMock('Swift_KeyCache');
$cache = $this->getMockBuilder('Swift_KeyCache')->getMock();
$cache->expects($this->once()) $cache->expects($this->once())
->method('clearKey') ->method('clearKey')
->with($this->_nsKey, 'foo'); ->with($this->_nsKey, 'foo');


public function testClonedStreamStillReferencesSameCache() public function testClonedStreamStillReferencesSameCache()
{ {
$cache = $this->getMock('Swift_KeyCache');
$cache = $this->getMockBuilder('Swift_KeyCache')->getMock();
$cache->expects($this->at(0)) $cache->expects($this->at(0))
->method('setString') ->method('setString')
->with($this->_nsKey, 'foo', 'a', Swift_KeyCache::MODE_APPEND); ->with($this->_nsKey, 'foo', 'a', Swift_KeyCache::MODE_APPEND);

+ 1
- 1
vendor/swiftmailer/swiftmailer/tests/unit/Swift/MessageTest.php Переглянути файл

$arr2_value = $array2[$key]; $arr2_value = $array2[$key];
$arr1_clone_value = $array1_clone[$key]; $arr1_clone_value = $array1_clone[$key];


return $this->_recursiveArrayCloningCheck($obj1_value, $obj2_value, $obj1_clone_value);
return $this->_recursiveArrayCloningCheck($arr1_value, $arr2_value, $arr1_clone_value);
} }
} }
} }

+ 2
- 2
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/AbstractMimeEntityTest.php Переглянути файл



protected function _createEncoder($name = 'quoted-printable', $stub = true) protected function _createEncoder($name = 'quoted-printable', $stub = true)
{ {
$encoder = $this->getMock('Swift_Mime_ContentEncoder');
$encoder = $this->getMockBuilder('Swift_Mime_ContentEncoder')->getMock();
$encoder->expects($this->any()) $encoder->expects($this->any())
->method('getName') ->method('getName')
->will($this->returnValue($name)); ->will($this->returnValue($name));


protected function _createInputStream($stub = true) protected function _createInputStream($stub = true)
{ {
return $this->getMock('Swift_InputByteStream');
return $this->getMockBuilder('Swift_InputByteStream')->getMock();
} }
} }

+ 1
- 1
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/MimePartTest.php Переглянути файл

'Content-Type' => $cType, )), 'Content-Type' => $cType, )),
$this->_createEncoder(), $this->_createCache() $this->_createEncoder(), $this->_createCache()
); );
$this->assertSame(false, $part->getDelSp());
$this->assertFalse($part->getDelSp());
} }


public function testDelSpIsSetInHeader() public function testDelSpIsSetInHeader()

+ 2
- 2
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleHeaderFactoryTest.php Переглянути файл



private function _createHeaderEncoder() private function _createHeaderEncoder()
{ {
return $this->getMock('Swift_Mime_HeaderEncoder');
return $this->getMockBuilder('Swift_Mime_HeaderEncoder')->getMock();
} }


private function _createParamEncoder() private function _createParamEncoder()
{ {
return $this->getMock('Swift_Encoder');
return $this->getMockBuilder('Swift_Encoder')->getMock();
} }
} }

+ 2
- 2
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleHeaderSetTest.php Переглянути файл



private function _createFactory() private function _createFactory()
{ {
return $this->getMock('Swift_Mime_HeaderFactory');
return $this->getMockBuilder('Swift_Mime_HeaderFactory')->getMock();
} }


private function _createHeader($name, $body = '') private function _createHeader($name, $body = '')
{ {
$header = $this->getMock('Swift_Mime_Header');
$header = $this->getMockBuilder('Swift_Mime_Header')->getMock();
$header->expects($this->any()) $header->expects($this->any())
->method('getFieldName') ->method('getFieldName')
->will($this->returnValue($name)); ->will($this->returnValue($name));

+ 3
- 3
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleMessageTest.php Переглянути файл

$this->_createHeaderSet(array('X-Priority' => $prio)), $this->_createHeaderSet(array('X-Priority' => $prio)),
$this->_createEncoder(), $this->_createCache() $this->_createEncoder(), $this->_createCache()
); );
$message->setPriority(5);
$message->setPriority($message::PRIORITY_LOWEST);
} }


public function testPriorityHeaderIsAddedIfNoneSet() public function testPriorityHeaderIsAddedIfNoneSet()
$message = $this->_createMessage($headers, $this->_createEncoder(), $message = $this->_createMessage($headers, $this->_createEncoder(),
$this->_createCache() $this->_createCache()
); );
$message->setPriority(4);
$message->setPriority($message::PRIORITY_LOW);
} }


public function testReadReceiptAddressReadFromHeader() public function testReadReceiptAddressReadFromHeader()
->setTo(array('chris@site.tld', 'mark@site.tld')) ->setTo(array('chris@site.tld', 'mark@site.tld'))
->setCc('john@somewhere.tld') ->setCc('john@somewhere.tld')
->setBcc(array('one@site', 'two@site' => 'Two')) ->setBcc(array('one@site', 'two@site' => 'Two'))
->setPriority(4)
->setPriority($message::PRIORITY_LOW)
->setReadReceiptTo('a@b') ->setReadReceiptTo('a@b')
->attach($child) ->attach($child)
->detach($child) ->detach($child)

+ 2
- 2
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/AntiFloodPluginTest.php Переглянути файл



public function testPluginCanSleepDuringRestart() public function testPluginCanSleepDuringRestart()
{ {
$sleeper = $this->getMock('Swift_Plugins_Sleeper');
$sleeper = $this->getMockBuilder('Swift_Plugins_Sleeper')->getMock();
$sleeper->expects($this->once()) $sleeper->expects($this->once())
->method('sleep') ->method('sleep')
->with(10); ->with(10);


private function _createTransport() private function _createTransport()
{ {
return $this->getMock('Swift_Transport');
return $this->getMockBuilder('Swift_Transport')->getMock();
} }


private function _createSendEvent($transport) private function _createSendEvent($transport)

+ 1
- 1
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/BandwidthMonitorPluginTest.php Переглянути файл

private function _createMessageWithByteCount($bytes) private function _createMessageWithByteCount($bytes)
{ {
$this->_bytes = $bytes; $this->_bytes = $bytes;
$msg = $this->getMock('Swift_Mime_Message');
$msg = $this->getMockBuilder('Swift_Mime_Message')->getMock();
$msg->expects($this->any()) $msg->expects($this->any())
->method('toByteStream') ->method('toByteStream')
->will($this->returnCallback(array($this, '_write'))); ->will($this->returnCallback(array($this, '_write')));

+ 2
- 2
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/LoggerPluginTest.php Переглянути файл



private function _createLogger() private function _createLogger()
{ {
return $this->getMock('Swift_Plugins_Logger');
return $this->getMockBuilder('Swift_Plugins_Logger')->getMock();
} }


private function _createPlugin($logger) private function _createPlugin($logger)


private function _createTransport() private function _createTransport()
{ {
return $this->getMock('Swift_Transport');
return $this->getMockBuilder('Swift_Transport')->getMock();
} }


private function _createTransportChangeEvent() private function _createTransportChangeEvent()

+ 2
- 2
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/PopBeforeSmtpPluginTest.php Переглянути файл



private function _createTransport() private function _createTransport()
{ {
return $this->getMock('Swift_Transport');
return $this->getMockBuilder('Swift_Transport')->getMock();
} }


private function _createTransportChangeEvent($transport) private function _createTransportChangeEvent($transport)


public function _createConnection() public function _createConnection()
{ {
return $this->getMock('Swift_Plugins_Pop_Pop3Connection');
return $this->getMockBuilder('Swift_Plugins_Pop_Pop3Connection')->getMock();
} }


public function _createPlugin($host, $port, $crypto = null) public function _createPlugin($host, $port, $crypto = null)

+ 1
- 1
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Reporters/HitReporterTest.php Переглянути файл

public function setUp() public function setUp()
{ {
$this->_hitReporter = new Swift_Plugins_Reporters_HitReporter(); $this->_hitReporter = new Swift_Plugins_Reporters_HitReporter();
$this->_message = $this->getMock('Swift_Mime_Message');
$this->_message = $this->getMockBuilder('Swift_Mime_Message')->getMock();
} }


public function testReportingFail() public function testReportingFail()

+ 1
- 1
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Reporters/HtmlReporterTest.php Переглянути файл

public function setUp() public function setUp()
{ {
$this->_html = new Swift_Plugins_Reporters_HtmlReporter(); $this->_html = new Swift_Plugins_Reporters_HtmlReporter();
$this->_message = $this->getMock('Swift_Mime_Message');
$this->_message = $this->getMockBuilder('Swift_Mime_Message')->getMock();
} }


public function testReportingPass() public function testReportingPass()

+ 1
- 2
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/EsmtpTransportTest.php Переглянути файл

<?php <?php


class Swift_Transport_EsmtpTransportTest
extends Swift_Transport_AbstractSmtpEventSupportTest
class Swift_Transport_EsmtpTransportTest extends Swift_Transport_AbstractSmtpEventSupportTest
{ {
protected function _getTransport($buf, $dispatcher = null) protected function _getTransport($buf, $dispatcher = null)
{ {

+ 1
- 1
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/LoadBalancedTransportTest.php Переглянути файл

$t1->shouldReceive('send') $t1->shouldReceive('send')
->once() ->once()
->with($message, \Mockery::on(function (&$var) use (&$failures, $testCase) { ->with($message, \Mockery::on(function (&$var) use (&$failures, $testCase) {
return $testCase->varsAreReferences($var, $failures);
return $testCase->varsAreReferences($var, $failures);
})) }))
->andReturnUsing(function () use (&$connectionState) { ->andReturnUsing(function () use (&$connectionState) {
if ($connectionState) { if ($connectionState) {

+ 32
- 2
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/MailTransportTest.php Переглянути файл

<?php <?php


/**
* @group legacy
*/
class Swift_Transport_MailTransportTest extends \SwiftMailerTestCase class Swift_Transport_MailTransportTest extends \SwiftMailerTestCase
{ {
public function testTransportInvokesMailOncePerMessage() public function testTransportInvokesMailOncePerMessage()
); );
$invoker->shouldReceive('mail') $invoker->shouldReceive('mail')
->once() ->once()
->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), '-f\'foo@bar\'');
->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), '-ffoo@bar');


$transport->send($message); $transport->send($message);
} }
->andReturn(null); ->andReturn(null);
$invoker->shouldReceive('mail') $invoker->shouldReceive('mail')
->once() ->once()
->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), '-x\'foo\' -f\'foo@bar\'');
->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), '-x\'foo\' -ffoo@bar');


$transport->send($message); $transport->send($message);
} }
$transport->send($message); $transport->send($message);
} }


public function testTransportSettingInvalidFromEmail()
{
$invoker = $this->_createInvoker();
$dispatcher = $this->_createEventDispatcher();
$transport = $this->_createTransport($invoker, $dispatcher);

$headers = $this->_createHeaders();
$message = $this->_createMessageWithRecipient($headers);

$message->shouldReceive('getReturnPath')
->zeroOrMoreTimes()
->andReturn(
'"attacker\" -oQ/tmp/ -X/var/www/cache/phpcode.php "@email.com'
);
$message->shouldReceive('getSender')
->zeroOrMoreTimes()
->andReturn(null);
$message->shouldReceive('getFrom')
->zeroOrMoreTimes()
->andReturn(null);
$invoker->shouldReceive('mail')
->once()
->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), null);

$transport->send($message);
}

public function testTransportUsesHeadersFromMessage() public function testTransportUsesHeadersFromMessage()
{ {
$invoker = $this->_createInvoker(); $invoker = $this->_createInvoker();

+ 1
- 2
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/SendmailTransportTest.php Переглянути файл

<?php <?php


class Swift_Transport_SendmailTransportTest
extends Swift_Transport_AbstractSmtpEventSupportTest
class Swift_Transport_SendmailTransportTest extends Swift_Transport_AbstractSmtpEventSupportTest
{ {
protected function _getTransport($buf, $dispatcher = null, $command = '/usr/sbin/sendmail -bs') protected function _getTransport($buf, $dispatcher = null, $command = '/usr/sbin/sendmail -bs')
{ {

+ 2
- 2
vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/StreamBufferTest.php Переглянути файл



private function _createFactory() private function _createFactory()
{ {
return $this->getMock('Swift_ReplacementFilterFactory');
return $this->getMockBuilder('Swift_ReplacementFilterFactory')->getMock();
} }


public function _createFilter() public function _createFilter()
{ {
return $this->getMock('Swift_StreamFilter');
return $this->getMockBuilder('Swift_StreamFilter')->getMock();
} }
} }

+ 24
- 15
vendor/yiisoft/extensions.php Переглянути файл

'@yii/bootstrap' => $vendorDir . '/yiisoft/yii2-bootstrap', '@yii/bootstrap' => $vendorDir . '/yiisoft/yii2-bootstrap',
), ),
), ),
'yiisoft/yii2-debug' =>
'yiisoft/yii2-gii' =>
array ( array (
'name' => 'yiisoft/yii2-debug',
'version' => '2.0.6.0',
'name' => 'yiisoft/yii2-gii',
'version' => '2.0.5.0',
'alias' => 'alias' =>
array ( array (
'@yii/debug' => $vendorDir . '/yiisoft/yii2-debug',
'@yii/gii' => $vendorDir . '/yiisoft/yii2-gii',
), ),
), ),
'yiisoft/yii2-gii' =>
'c006/yii2-paypal-ipn' =>
array ( array (
'name' => 'yiisoft/yii2-gii',
'version' => '2.0.5.0',
'name' => 'c006/yii2-paypal-ipn',
'version' => '9999999-dev',
'alias' => 'alias' =>
array ( array (
'@yii/gii' => $vendorDir . '/yiisoft/yii2-gii',
'@c006/paypal_ipn' => $vendorDir . '/c006/yii2-paypal-ipn',
), ),
), ),
'2amigos/yii2-leaflet-extension' => '2amigos/yii2-leaflet-extension' =>
array ( array (
'name' => '2amigos/yii2-leaflet-extension', 'name' => '2amigos/yii2-leaflet-extension',
'version' => '1.0.2.0',
'version' => '1.0.3.0',
'alias' => 'alias' =>
array ( array (
'@dosamigos/leaflet' => $vendorDir . '/2amigos/yii2-leaflet-extension/src', '@dosamigos/leaflet' => $vendorDir . '/2amigos/yii2-leaflet-extension/src',
), ),
), ),
'kartik-v/yii2-mpdf' =>
'yiisoft/yii2-debug' =>
array ( array (
'name' => 'kartik-v/yii2-mpdf',
'name' => 'yiisoft/yii2-debug',
'version' => '2.0.7.0',
'alias' =>
array (
'@yii/debug' => $vendorDir . '/yiisoft/yii2-debug',
),
),
'yurkinx/yii2-image' =>
array (
'name' => 'yurkinx/yii2-image',
'version' => '9999999-dev', 'version' => '9999999-dev',
'alias' => 'alias' =>
array ( array (
'@kartik/mpdf' => $vendorDir . '/kartik-v/yii2-mpdf',
'@yii/image' => $vendorDir . '/yurkinx/yii2-image/yii/image',
), ),
), ),
'c006/yii2-paypal-ipn' =>
'kartik-v/yii2-mpdf' =>
array ( array (
'name' => 'c006/yii2-paypal-ipn',
'name' => 'kartik-v/yii2-mpdf',
'version' => '9999999-dev', 'version' => '9999999-dev',
'alias' => 'alias' =>
array ( array (
'@c006/paypal_ipn' => $vendorDir . '/c006/yii2-paypal-ipn',
'@kartik/mpdf' => $vendorDir . '/kartik-v/yii2-mpdf',
), ),
), ),
); );

+ 0
- 1
vendor/yiisoft/yii2-composer/.gitignore Переглянути файл

/composer.lock

+ 9
- 0
vendor/yiisoft/yii2-composer/CHANGELOG.md Переглянути файл

Yii Framework 2 composer extension Change Log Yii Framework 2 composer extension Change Log
============================================= =============================================


2.0.5 December 20, 2016
-----------------------

- Bug #11: `generateCookieValidationKey()` now saves config file only when `cookieValidationKey` was generated (rob006)
- Enh #10: Added `yii\composer\Installer::postInstall()` method (rob006)
- Enh #12: Added `yii\composer\Installer::copyFiles()` method (rob006)
- Enh #14: A note about yii UPGRADE notes file is shown after upgrading Yii to make user aware of it (cebe)


2.0.4 February 06, 2016 2.0.4 February 06, 2016
----------------------- -----------------------



+ 76
- 5
vendor/yiisoft/yii2-composer/Installer.php Переглянути файл

use Composer\Installer\LibraryInstaller; use Composer\Installer\LibraryInstaller;
use Composer\Repository\InstalledRepositoryInterface; use Composer\Repository\InstalledRepositoryInterface;
use Composer\Script\CommandEvent; use Composer\Script\CommandEvent;
use Composer\Script\Event;
use Composer\Util\Filesystem; use Composer\Util\Filesystem;


/** /**
rmdir($yiiDir); rmdir($yiiDir);
} }
} }

/**
* Special method to run tasks defined in `[extra][yii\composer\Installer::postCreateProject]` key in `composer.json`
*
* @param Event $event
*/
public static function postCreateProject($event) public static function postCreateProject($event)
{
static::runCommands($event, __METHOD__);
}

/**
* Special method to run tasks defined in `[extra][yii\composer\Installer::postInstall]` key in `composer.json`
*
* @param Event $event
* @since 2.0.5
*/
public static function postInstall($event)
{
static::runCommands($event, __METHOD__);
}

/**
* Special method to run tasks defined in `[extra][$extraKey]` key in `composer.json`
*
* @param Event $event
* @param string $extraKey
* @since 2.0.5
*/
protected static function runCommands($event, $extraKey)
{ {
$params = $event->getComposer()->getPackage()->getExtra(); $params = $event->getComposer()->getPackage()->getExtra();
if (isset($params[__METHOD__]) && is_array($params[__METHOD__])) {
foreach ($params[__METHOD__] as $method => $args) {
if (isset($params[$extraKey]) && is_array($params[$extraKey])) {
foreach ($params[$extraKey] as $method => $args) {
call_user_func_array([__CLASS__, $method], (array) $args); call_user_func_array([__CLASS__, $method], (array) $args);
} }
} }
$key = self::generateRandomString(); $key = self::generateRandomString();
foreach ($configs as $config) { foreach ($configs as $config) {
if (is_file($config)) { if (is_file($config)) {
$content = preg_replace('/(("|\')cookieValidationKey("|\')\s*=>\s*)(""|\'\')/', "\\1'$key'", file_get_contents($config));
file_put_contents($config, $content);
$content = preg_replace('/(("|\')cookieValidationKey("|\')\s*=>\s*)(""|\'\')/', "\\1'$key'", file_get_contents($config), -1, $count);
if ($count > 0) {
file_put_contents($config, $content);
}
} }
} }
} }
$bytes = openssl_random_pseudo_bytes($length); $bytes = openssl_random_pseudo_bytes($length);
return strtr(substr(base64_encode($bytes), 0, $length), '+/=', '_-.'); return strtr(substr(base64_encode($bytes), 0, $length), '+/=', '_-.');
} }

/**
* Copy files to specified locations.
* @param array $paths The source files paths (keys) and the corresponding target locations
* for copied files (values). Location can be specified as an array - first element is target
* location, second defines whether file can be overwritten (by default method don't overwrite
* existing files).
* @since 2.0.5
*/
public static function copyFiles(array $paths)
{
foreach ($paths as $source => $target) {
// handle file target as array [path, overwrite]
$target = (array) $target;
echo "Copying file $source to $target[0] - ";

if (!is_file($source)) {
echo "source file not found.\n";
continue;
}

if (is_file($target[0]) && empty($target[1])) {
echo "target file exists - skip.\n";
continue;
} elseif (is_file($target[0]) && !empty($target[1])) {
echo "target file exists - overwrite - ";
}

try {
if (!is_dir(dirname($target[0]))) {
mkdir(dirname($target[0]), 0777, true);
}
if (copy($source, $target[0])) {
echo "done.\n";
}
} catch (\Exception $e) {
echo $e->getMessage() . "\n";
}
}
}
} }

+ 175
- 2
vendor/yiisoft/yii2-composer/Plugin.php Переглянути файл

namespace yii\composer; namespace yii\composer;


use Composer\Composer; use Composer\Composer;
use Composer\DependencyResolver\Operation\UpdateOperation;
use Composer\EventDispatcher\EventSubscriberInterface;
use Composer\Installer\PackageEvent;
use Composer\Installer\PackageEvents;
use Composer\IO\IOInterface; use Composer\IO\IOInterface;
use Composer\Plugin\PluginInterface; use Composer\Plugin\PluginInterface;
use Composer\Script;
use Composer\Script\ScriptEvents;


/** /**
* Plugin is the composer plugin that registers the Yii composer installer. * Plugin is the composer plugin that registers the Yii composer installer.
* @author Qiang Xue <qiang.xue@gmail.com> * @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0 * @since 2.0
*/ */
class Plugin implements PluginInterface
class Plugin implements PluginInterface, EventSubscriberInterface
{ {
/**
* @var array noted package updates.
*/
private $_packageUpdates = [];
/**
* @var string path to the vendor directory.
*/
private $_vendorDir;


/** /**
* @inheritdoc * @inheritdoc
*/ */
{ {
$installer = new Installer($io, $composer); $installer = new Installer($io, $composer);
$composer->getInstallationManager()->addInstaller($installer); $composer->getInstallationManager()->addInstaller($installer);
$file = rtrim($composer->getConfig()->get('vendor-dir'), '/') . '/yiisoft/extensions.php';
$this->_vendorDir = rtrim($composer->getConfig()->get('vendor-dir'), '/');
$file = $this->_vendorDir . '/yiisoft/extensions.php';
if (!is_file($file)) { if (!is_file($file)) {
@mkdir(dirname($file), 0777, true); @mkdir(dirname($file), 0777, true);
file_put_contents($file, "<?php\n\nreturn [];\n"); file_put_contents($file, "<?php\n\nreturn [];\n");
} }
} }

/**
* @inheritdoc
* @return array The event names to listen to.
*/
public static function getSubscribedEvents()
{
return [
PackageEvents::POST_PACKAGE_UPDATE => 'checkPackageUpdates',
ScriptEvents::POST_UPDATE_CMD => 'showUpgradeNotes',
];
}


/**
* Listen to POST_PACKAGE_UPDATE event and take note of the package updates.
* @param PackageEvent $event
*/
public function checkPackageUpdates(PackageEvent $event)
{
$operation = $event->getOperation();
if ($operation instanceof UpdateOperation) {
$this->_packageUpdates[$operation->getInitialPackage()->getName()] = [
'from' => $operation->getInitialPackage()->getVersion(),
'fromPretty' => $operation->getInitialPackage()->getPrettyVersion(),
'to' => $operation->getTargetPackage()->getVersion(),
'toPretty' => $operation->getTargetPackage()->getPrettyVersion(),
'direction' => $event->getPolicy()->versionCompare(
$operation->getInitialPackage(),
$operation->getTargetPackage(),
'<'
) ? 'up' : 'down',
];
}
}

/**
* Listen to POST_UPDATE_CMD event to display information about upgrade notes if appropriate.
* @param Script\Event $event
*/
public function showUpgradeNotes(Script\Event $event)
{
$packageName = 'yiisoft/yii2';
if (!isset($this->_packageUpdates[$packageName])) {
return;
}

$package = $this->_packageUpdates['yiisoft/yii2'];

// do not show a notice on up/downgrades between dev versions
// avoid messages like from version dev-master to dev-master
if ($package['fromPretty'] == $package['toPretty']) {
return;
}

$io = $event->getIO();

// print the relevant upgrade notes for the upgrade
// - only on upgrade, not on downgrade
// - only if the "from" version is non-dev, otherwise we have no idea which notes to show
if ($package['direction'] === 'up' && $this->isNumericVersion($package['fromPretty'])) {

$notes = $this->findUpgradeNotes($packageName, $package['fromPretty']);
if ($notes !== false && empty($notes)) {
// no relevent upgrade notes, do not show anything.
return;
}

$this->printUpgradeIntro($io, $package);

if ($notes) {
// safety check: do not display notes if they are too many
if (count($notes) > 250) {
$io->write("\n <fg=yellow;options=bold>The relevant notes for your upgrade are too long to be displayed here.</>");
} else {
$io->write("\n " . trim(implode("\n ", $notes)));
}
}

$io->write("\n You can find the upgrade notes for all versions online at:");
} else {
$this->printUpgradeIntro($io, $package);
$io->write("\n You can find the upgrade notes online at:");
}
$this->printUpgradeLink($io, $package);
}

/**
* Print link to upgrade notes
* @param IOInterface $io
* @param array $package
*/
private function printUpgradeLink($io, $package)
{
$maxVersion = $package['direction'] === 'up' ? $package['toPretty'] : $package['fromPretty'];
// make sure to always show a valid link, even if $maxVersion is something like dev-master
if (!$this->isNumericVersion($maxVersion)) {
$maxVersion = 'master';
}
$io->write(" https://github.com/yiisoft/yii2/blob/$maxVersion/framework/UPGRADE.md\n");
}

/**
* Print upgrade intro
* @param IOInterface $io
* @param array $package
*/
private function printUpgradeIntro($io, $package)
{
$io->write("\n <fg=yellow;options=bold>Seems you have "
. ($package['direction'] === 'up' ? 'upgraded' : 'downgraded')
. ' Yii Framework from version '
. $package['fromPretty'] . ' to ' . $package['toPretty'] . '.</>'
);
$io->write("\n <options=bold>Please check the upgrade notes for possible incompatible changes");
$io->write(' and adjust your application code accordingly.</>');
}

/**
* Read upgrade notes from a files and returns an array of lines
* @param string $packageName
* @param string $fromVersion until which version to read the notes
* @return array|false
*/
private function findUpgradeNotes($packageName, $fromVersion)
{
$upgradeFile = $this->_vendorDir . '/' . $packageName . '/UPGRADE.md';
if (!is_file($upgradeFile) || !is_readable($upgradeFile)) {
return false;
}
$lines = preg_split('~\R~', file_get_contents($upgradeFile));
$relevantLines = [];
$consuming = false;
foreach($lines as $line) {
if (preg_match('/^Upgrade from Yii ([0-9]\.[0-9]+\.?[0-9]*)/i', $line, $matches)) {
if (version_compare($matches[1], $fromVersion, '<')) {
break;
}
$consuming = true;
}
if ($consuming) {
$relevantLines[] = $line;
}
}
return $relevantLines;
}

/**
* Check whether a version is numeric, e.g. 2.0.10.
* @param string $version
* @return int|false
*/
private function isNumericVersion($version)
{
return preg_match('~^([0-9]\.[0-9]+\.?[0-9]*)~', $version);
}
} }

+ 35
- 14
vendor/yiisoft/yii2-composer/README.md Переглянути файл

Usage Usage
----- -----


To use Yii 2 composer installer, simply set `type` to be `yii2-extension` in your `composer.json`,
The Yii 2 Composer Installer is automatically installed with when installing the framework via Composer.

To use Yii 2 composer installer, simply set the package `type` to be `yii2-extension` in your `composer.json`,
like the following: like the following:


```json ```json
{ {
"type": "yii2-extension", "type": "yii2-extension",
"require": { "require": {
"yiisoft/yii2": "*"
"yiisoft/yii2": "~2.0.0"
}, },
... ...
} }
} }
``` ```


The `Installer` class also implements a static method `setPermission()` that can be called after
a Yii 2 projected is installed, through the `post-create-project-cmd` composer script.
The method will set specified directories or files to be writable or executable, depending on
the corresponding parameters set in the `extra` section of the `composer.json` file.
The `Installer` class also implements a static method `postCreateProject()` that can be called after
a Yii 2 project is created, through the `post-create-project-cmd` composer script.
A similar method exists for running tasks after each `composer install` call, which sis `postInstall()`.
These methods allow to run other `Installer` class methods like `setPermission()` or `generateCookieValidationKey()`,
depending on the corresponding parameters set in the `extra` section of the `composer.json` file.
For example, For example,


```json ```json
... ...
"scripts": { "scripts": {
"post-create-project-cmd": [ "post-create-project-cmd": [
"yii\\composer\\Installer::setPermission"
"yii\\composer\\Installer::postCreateProject"
],
"post-install-cmd": [
"yii\\composer\\Installer::postInstall"
] ]
}, },
"extra": { "extra": {
"writable": [
"runtime",
"web/assets"
],
"executable": [
"yii"
]
"yii\\composer\\Installer::postCreateProject": {
"setPermission": [
{
"runtime": "0777",
"web/assets": "0777",
"yii": "0755"
}
]
},
"yii\\composer\\Installer::postInstall": {
"copyFiles": [
{
"config/templates/console-local.php": "config/console-local.php",
"config/templates/web-local.php": "config/web-local.php",
"config/templates/db-local.php": "config/db-local.php",
"config/templates/cache.json": ["runtime/cache.json", true]
}
],
"generateCookieValidationKey": [
"config/web-local.php"
]
}
} }
} }
``` ```

+ 3
- 0
vendor/yiisoft/yii2-composer/composer.json Переглянути файл

"require": { "require": {
"composer-plugin-api": "^1.0" "composer-plugin-api": "^1.0"
}, },
"require-dev": {
"composer/composer": "^1.0"
},
"autoload": { "autoload": {
"psr-4": { "yii\\composer\\": "" } "psr-4": { "yii\\composer\\": "" }
}, },

+ 27
- 0
vendor/yiisoft/yii2-debug/CHANGELOG.md Переглянути файл

Yii Framework 2 debug extension Change Log Yii Framework 2 debug extension Change Log
========================================== ==========================================


2.0.7 under development
-----------------------

- Bug #61: Fixed toolbar not to be cached by using renderDynamic (dynasource)
- Bug #93: Fixed `AssetPanel` error when bundle `$js` or `$css` contained `jsOptions` overrides (Razzwan, samdark)
- Bug #99: Avoid serializing php7 errors (zuozp8)
- Bug #111: Fixed `LogTarget` to work properly when tests are ran via Codeception (samdark, nlmedina)
- Bug #120: Fixed toolbar height changing when opened/closed and when using bootstrap (nkovacs)
- Bug #148: Don't animate iframe needlessly when window is resized. (nkovacs)
- Bug #150: Fixed "Cannot read property 'replaceChild' of null" error (BetsuNo)
- Bug #152: Fixed log search to work with non-scalar values (samdark)
- Bug #160: Remove height as it prevents the background from stretching, causing unreadable overlapping texts over background (dynasource)
- Bug #168: Fixed wrong toggle button direction (fps01)
- Enh #8: Added ability to configure default sorting and filtering for Database panel (laszlovl)
- Enh #27: Adjusted sorting defaults, removed row numbers from database, log and profiling panels (samdark)
- Enh #58: Added timeline panel (bashkarev)
- Enh #97: Added AJAX requests handling (bashkarev)
- Enh #105: Enhanced `ConfigPanel` to detect and report memcached extension presence (samdark)
- Enh #115: Make the default panel configurable and set it to `log` (mikehaertl)
- Enh #117: Added ability to customize the logo with `Module::setYiiLogo()` (brandonkelly)
- Enh #143: Added application version display at `ConfigPanel` (klimov-paul)
- Enh #145: The error and warning labels of the log section on the summary bar now link directly to the log page filtered by log level type (rhertogh)
- Enh #162: Added ability to config the trace file and line number (thiagotalma)
- Enh: Mouse wheel click, or Ctrl+Click opens debugger in new tab (silverfire)
- Enh: `yii\debug\Module::defaultVersion()` implemented to pick up 'yiisoft/yii2-debug' extension version (klimov-paul)


2.0.6 March 17, 2016 2.0.6 March 17, 2016
-------------------- --------------------



+ 6
- 2
vendor/yiisoft/yii2-debug/LogTarget.php Переглянути файл

* And if requested, it will also export the filtering result to specific medium (e.g. email). * And if requested, it will also export the filtering result to specific medium (e.g. email).
* @param array $messages log messages to be processed. See [[\yii\log\Logger::messages]] for the structure * @param array $messages log messages to be processed. See [[\yii\log\Logger::messages]] for the structure
* of each message. * of each message.
* @param boolean $final whether this method is called at the end of the current application
* @param bool $final whether this method is called at the end of the current application
*/ */
public function collect($messages, $final) public function collect($messages, $final)
{ {
*/ */
protected function collectSummary() protected function collectSummary()
{ {
if (Yii::$app === null) {
return '';
}

$request = Yii::$app->getRequest(); $request = Yii::$app->getRequest();
$response = Yii::$app->getResponse(); $response = Yii::$app->getResponse();
$summary = [ $summary = [
/** /**
* Returns total sql count executed in current request. If database panel is not configured * Returns total sql count executed in current request. If database panel is not configured
* returns 0. * returns 0.
* @return integer
* @return int
*/ */
protected function getSqlTotalCount() protected function getSqlTotalCount()
{ {

+ 98
- 8
vendor/yiisoft/yii2-debug/Module.php
Різницю між файлами не показано, бо вона завелика
Переглянути файл


+ 33
- 3
vendor/yiisoft/yii2-debug/Panel.php Переглянути файл



use Yii; use Yii;
use yii\base\Component; use yii\base\Component;
use yii\helpers\ArrayHelper;
use yii\helpers\Url; use yii\helpers\Url;


/** /**
} }


/** /**
* @param null|array $additionalParams Optional additional parameters to add to the route
* @return string URL pointing to panel detail view * @return string URL pointing to panel detail view
*/ */
public function getUrl()
public function getUrl($additionalParams = null)
{ {
return Url::toRoute(['/' . $this->module->id . '/default/view',
$route = [
'/' . $this->module->id . '/default/view',
'panel' => $this->id, 'panel' => $this->id,
'tag' => $this->tag, 'tag' => $this->tag,
]);
];

if (is_array($additionalParams)){
$route = ArrayHelper::merge($route, $additionalParams);
}

return Url::toRoute($route);
}

/**
* Returns a trace line
* @param array $options The array with trace
* @return string the trace line
* @since 2.0.7
*/
public function getTraceLine($options)
{
if (!isset($options['text'])) {
$options['text'] = "{$options['file']}:{$options['line']}";
}
$traceLine = $this->module->traceLine;
if ($traceLine === false) {
return $options['text'];
} else {
$options['file'] = str_replace('\\', '/', $options['file']);
$rawLink = $traceLine instanceof \Closure ? call_user_func($traceLine, $options, $this) : $traceLine;
return strtr($rawLink, ['{file}' => $options['file'], '{line}' => $options['line'], '{text}' => $options['text']]);
}
} }
} }

Деякі файли не було показано, через те що забагато файлів було змінено

Завантаження…
Відмінити
Зберегти