';
+
+
+
- }
-}
+ }
+ }
diff --git a/app/Controllers/ApiController.php b/app/Controllers/ApiController.php
index 94bac5a..1963702 100644
--- a/app/Controllers/ApiController.php
+++ b/app/Controllers/ApiController.php
@@ -18,6 +18,7 @@ use \App\Controllers\Api\Images\Comments\Edit as PhotoCommentEdit;
use \App\Controllers\Api\Images\Comments\Delete as PhotoCommentDelete;
use \App\Controllers\Api\Images\Comments\Load as PhotoCommentLoad;
use \App\Controllers\Api\Images\Comments\Rate as PhotoCommentVote;
+use \App\Controllers\Api\Vehicles\Load as VehiclesLoad;
use \App\Controllers\Api\Profile\Update as ProfileUpdate;
use \App\Controllers\Api\Users\LoadUser as UserLoad;
use \App\Controllers\Api\Admin\Images\SetVisibility as AdminPhotoSetVisibility;
@@ -91,6 +92,9 @@ class ApiController
public static function admingetvehicleinputs() {
return new AdminGetVehicleInputs();
}
+ public static function vehiclesload() {
+ return new VehiclesLoad();
+ }
}
\ No newline at end of file
diff --git a/app/Core/Routes.php b/app/Core/Routes.php
index 212f5c9..427427c 100644
--- a/app/Core/Routes.php
+++ b/app/Core/Routes.php
@@ -61,6 +61,7 @@ class Routes
Router::get('/api/photo/comment/rate', 'ApiController@photocommentvote');
Router::post('/api/photo/comment/$id/edit', 'ApiController@photocommentedit');
Router::post('/api/photo/comment/$id/delete', 'ApiController@photocommentdelete');
+ Router::get('/api/vehicles/load', 'ApiController@vehiclesload');
if ($user->i('admin') > 0) {
Router::any('/admin', 'AdminController@index');
Router::any('/api/admin/images/setvisibility', 'ApiController@adminsetvis');
diff --git a/app/Models/Vote.php b/app/Models/Vote.php
index 71152f5..27d9f50 100644
--- a/app/Models/Vote.php
+++ b/app/Models/Vote.php
@@ -13,7 +13,6 @@ class Vote
if ($type < 0) {
$type = -1;
}
-
return $type;
} else {
return -1;
diff --git a/static/css/style.css b/static/css/style.css
index ca27c68..a20d656 100644
--- a/static/css/style.css
+++ b/static/css/style.css
@@ -98,6 +98,36 @@ a:hover {
background-color:var(--theme-link-hover-bg-color);
}
+input:checked[type=checkbox] {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e") !important;
+}
+
+input:checked {
+ background-color: #292929 !important;
+}
+
+
+input[type=checkbox]{
+ border-radius: 2px;
+ width: 1em;
+ height: 1em;
+ margin-top: .25em;
+ vertical-align: top;
+ background-color: #fff;
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: contain;
+ border: 1px solid rgba(0, 0, 0, .25);
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ -webkit-print-color-adjust: exact;
+ color-adjust: exact;
+ print-color-adjust: exact;
+}
+
+
+
a.und {
border-bottom:solid 1px var(--theme-link-underline-color);
}
diff --git a/static/js/core_lk.js b/static/js/core_lk.js
index 3417d72..56eeae1 100644
--- a/static/js/core_lk.js
+++ b/static/js/core_lk.js
@@ -1,7 +1,86 @@
var gal_cid = -1;
var new_vehicle_idx = 0;
var modified = false;
+var cnames = {2: 'Санкт-Петербург'};
+var binds = [
+ { value: 1, item: 'Основная — ТС на переднем плане', label: 'Основная' },
+{ value: 0, item: 'Второстепенная — ТС на заднем плане', label: 'Второстепенная' },
+{ value: 2, item: 'Условная — ТС указано предположительно', label: 'Условная' }
+];
+addTexts({
+ 'UP_WRONGTYPE': 'Недопустимый тип файла',
+ 'UP_TOOSMALL': 'Выбранное изображение слишком маленькое — его длина по широкой стороне составляет %d пикселей. Для загрузки на сайт она должна быть не менее %d пикселей',
+ 'UP_OVERSIZE_JPG': 'Выбранное изображение слишком большое — сумма его ширины и высоты составляет %d пикселей. Для изображений JPEG и WEBP она не должна превышать %d пикселей',
+ 'UP_OVERSIZE_PNG': 'Выбранное изображение слишком большое — его длина по широкой стороне составляет %d пикселей. Для изображений GIF и PNG она не должна превышать %d пикселей',
+ 'UP_LARGEFILE_JPG': 'Этот файл слишком большой — %d КБ. Вы можете загружать файлы JPEG и WEBP объёмом до %d КБ',
+ 'UP_LARGEFILE_PNG': 'Этот файл слишком большой — %d МБ. Вы можете загружать файлы GIF и PNG объёмом до %d МБ',
+ 'UP_NEEDRESIZE': 'Выбранное фото превышает %d пикселей по сумме ширины и высоты, поэтому оно будет уменьшено до %d пикселей по широкой стороне',
+ 'UP_NULART': '(подходящей галереи нет в списке, требуется создать новую)',
+ 'UP_LOADING': 'Загрузка...',
+ 'UP_SEARCHING': 'Идёт поиск...',
+ 'UP_OTHER': 'Новая',
+ 'UP_NOFILE': 'Не выбран файл для загрузки',
+ 'UP_NOCOORDS': 'Поместите маркер на карте в точку, с которой вы производили съёмку. Для установки маркера достаточно кликнуть по карте в нужном месте.',
+ 'UP_NODIR': 'Укажите направление съёмки.',
+ 'UP_NOCITY': 'Вы не указали город. Нажмите кнопку подтверждения для отправки фотографии, если города съемки нет в списке. Нажмите кнопку отмены, если Вы забыли указать город.',
+ 'UP_OTHERCITY': 'Город съёмки не соответствует привязанным ТС и/или галереям. Продолжить отправку фото?',
+ 'UP_ERROR': 'Фото не было загружено :-(',
+ 'UP_SUCCESS': 'Фотография успешно загружена!',
+ 'UP_NOTHING': 'К сожалению, ничего подходящего найти не удалось',
+ 'UP_V_LINKED': 'Это ТС уже привязано к данному фото',
+ 'UP_G_LINKED': 'Эта галерея уже привязана к данному фото',
+ 'UP_CREATIVE': 'Фотография, загружаемая в «Фотозарисовки» или «Художественную галерею», не может быть привязана к ТС и другим галереям.',
+ 'UP_NOLINKS': 'Фотография ни к чему не привязана',
+ 'UP_NO_PRI': 'Фотография не может иметь только второстепенные привязки.',
+ 'UP_NODATE': 'Вы не указали дату снимка. Нажмите «OK», если так и должно быть, или «Отмена», если хотите добавить дату съёмки',
+ 'UP_NOPLACE': 'Вы не указали место съёмки. Нажмите «OK», если так и должно быть, или «Отмена», если хотите добавить место съёмки',
+ 'UP_ARTICLE': 'Галерея',
+ 'UP_LIMITEXC': 'Сегодня Вы уже загрузили максимально возможное число фотографий. Следующие фотографии Вы можете загрузить завтра',
+ 'UP_ROUTE': 'Маршрут',
+ 'UP_NOTES': 'примечание',
+ 'VIEW': 'Ракурс',
+ 'UP_NOVIEW': 'Не для всех ТС указан ракурс съёмки.',
+ 'UP_TOQUEUE': 'Это фото не может быть опубликовано без модерации, поэтому оно было помещено в очередь',
+ 'UP_BIND': 'Привязка',
+ 'UP_BIND_PRI': 'Основная — ТС на переднем плане',
+ 'UP_BIND_SEC': 'Второстепенная — ТС на заднем плане',
+ 'UP_BIND_CON': 'Условная — ТС указано предположительно',
+ 'UP_NAA_ALLOW_NO': 'Не указано разрешение на публикацию.',
+ 'UP_TWOSIDE': 'Вы выбрали тип ПС (двухсторонний/односторонний), не совпадающий с указанным для данной модели. Так и должно быть?',
+ 'MAP_SEARCH': 'Адрес или объект...',
+ 'MAP_NOTFOUND': 'На карте не удалось найти указанное место.',
+ 'MAP_OSM': 'Карта OpenStreetMap',
+ 'MAP_OSM_BW': 'Чёрно-белая карта OpenStreetMap',
+ 'MAP_OSM_HOT': 'Карта Humanitarian OpenStreetMap Team',
+ 'MAP_TOPO': 'Карта OpenTopoMap',
+ 'MAP_WIKIMEDIA': 'Карта Wikimedia',
+ 'MAP_OPNV': 'Карта ÖPNVKarte',
+ 'MAP_OPENPTMAP': 'Общественный транспорт от OpenPtMap',
+ 'MAP_RAILWAY': 'Железная дорога от OpenRailwayMap',
+ 'MAP_BING': 'Спутник Bing',
+ 'MAP_YANDEX': 'Карта Яндекс',
+ 'MAP_YANDSAT': 'Спутник Яндекс'
+});
+
+var views = {
+ 0: ' Не указан ',
+1: 'Спереди-справа (двери)',
+2: 'Спереди-слева (окна)',
+3: 'Сзади-справа (двери)',
+4: 'Сзади-слева (окна)',
+5: 'Вид строго спереди',
+6: 'Правый борт',
+7: 'Вид строго сзади',
+8: 'Левый борт',
+9: 'Салон, вид вперёд',
+10: 'Салон, вид назад',
+11: 'Кабина',
+12: 'Заводская табличка',
+13: 'Отдельные элементы ТС',
+14: 'Не определяется (двухстороннее ТС)',
+20: 'Вид сверху',
+40: 'Вид снизу'};
$(document).ready(function()
{
@@ -42,29 +121,21 @@ $(document).ready(function()
var html = '\n';
html += '