Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
  • Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
  • Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
  • Opera: Нажмите Ctrl+F5.
/******/ (function(modules) { // webpackBootstrap /******/ 	// The module cache /******/ 	var installedModules = {}; /******/ /******/ 	// The require function /******/ 	function __webpack_require__(moduleId) { /******/ /******/ 		// Check if module is in cache /******/ 		if(installedModules[moduleId]) { /******/ 			return installedModules[moduleId].exports; /******/ 		} /******/ 		// Create a new module (and put it into the cache) /******/ 		var module = installedModules[moduleId] = { /******/ 			i: moduleId, /******/ 			l: false, /******/ 			exports: {} /******/ 		}; /******/ /******/ 		// Execute the module function /******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ 		// Flag the module as loaded /******/ 		module.l = true; /******/ /******/ 		// Return the exports of the module /******/ 		return module.exports; /******/ 	} /******/ /******/ /******/ 	// expose the modules object (__webpack_modules__) /******/ 	__webpack_require__.m = modules; /******/ /******/ 	// expose the module cache /******/ 	__webpack_require__.c = installedModules; /******/ /******/ 	// define getter function for harmony exports /******/ 	__webpack_require__.d = function(exports, name, getter) { /******/ 		if(!__webpack_require__.o(exports, name)) { /******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ 		} /******/ 	}; /******/ /******/ 	// define __esModule on exports /******/ 	__webpack_require__.r = function(exports) { /******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ 		} /******/ 		Object.defineProperty(exports, '__esModule', { value: true }); /******/ 	}; /******/ /******/ 	// create a fake namespace object /******/ 	// mode & 1: value is a module id, require it /******/ 	// mode & 2: merge all properties of value into the ns /******/ 	// mode & 4: return value when already ns object /******/ 	// mode & 8|1: behave like require /******/ 	__webpack_require__.t = function(value, mode) { /******/ 		if(mode & 1) value = __webpack_require__(value); /******/ 		if(mode & 8) return value; /******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ 		var ns = Object.create(null); /******/ 		__webpack_require__.r(ns); /******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ 		return ns; /******/ 	}; /******/ /******/ 	// getDefaultExport function for compatibility with non-harmony modules /******/ 	__webpack_require__.n = function(module) { /******/ 		var getter = module && module.__esModule ? /******/ 			function getDefault() { return module['default']; } : /******/ 			function getModuleExports() { return module; }; /******/ 		__webpack_require__.d(getter, 'a', getter); /******/ 		return getter; /******/ 	}; /******/ /******/ 	// Object.prototype.hasOwnProperty.call /******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ 	// __webpack_public_path__ /******/ 	__webpack_require__.p = ""; /******/ /******/ /******/ 	// Load entry module and return exports /******/ 	return __webpack_require__(__webpack_require__.s = 0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) {  module.exports = __webpack_require__(1);   /***/ }), /* 1 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _lib_mediawiki_api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2); /* harmony import */ var _lib_wikitext_section_editor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3); /* harmony import */ var _lib_ui_components_pagination__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6); /* harmony import */ var _lib_ui_components_listing_item__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7); /* harmony import */ var _lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(16); /* harmony import */ var _lib_async_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(19); /* harmony import */ var _lib_wikivoyage_api__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(20); /* harmony import */ var _lib_cultural_editor_serializer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(21); /* harmony import */ var _lib_mediawiki_page_wikitext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(23); /* harmony import */ var _lib_download_content__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(25); /* harmony import */ var _lib_ui_components_export_panel__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(26); /* harmony import */ var _lib_array_utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(18); /* harmony import */ var _lib_commons_api__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(27); /* harmony import */ var _lib_string_utils__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(5); /* harmony import */ var _lib_commons_images_loader__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(28); /* harmony import */ var _lib_cultural_gallery_images__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(29); function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }  function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }                  /**  * TODO  *  * 1. Integration with missing images gadget.  * 2. Show loading/saving progress.  * 3. Complete listing template implementation.  * 4. Object passport document.  * 5. Advanced gallery.  * 6. Better compact view.  * 7. Captcha handling.  * 8. XSS.  * 9. Edit then go to another page.  * 10. Save all.  * 11. Leave warning.  * 12. Complete GPX, JSON, CSV export.  * 13. Map.  */  $(document).ready(function () {   var reportFatalError = function reportFatalError(errorText) {     var gadgetElement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;     window.console.error(errorText);      if (gadgetElement) {       var errorElement = $('<div style="color: red;">').text(errorText);       gadgetElement.append(errorElement);     }   };    var initGadget = function initGadget(gadgetElement) {     var settingsElement = gadgetElement.children('.gadget-heritage-list-settings');      if (settingsElement.length === 0) {       reportFatalError("Heritage gadget error: settings are not specified.", gadgetElement);       return;     }      if (settingsElement.length > 1) {       reportFatalError("Heritage gadget error: multiple settings elements are specified.", gadgetElement);       return;     }      var gadgetSettings = {};      try {       gadgetSettings = JSON.parse(settingsElement.text());     } catch (e) {       reportFatalError("Heritage gadget error: settings element contains invalid JSON.", gadgetElement);       return;     }      var gadgetContentElement = $('<div class="gadget-heritage-list-content">');     gadgetElement.append(gadgetContentElement);     showGadget(gadgetContentElement, gadgetSettings);     var fallbackElements = gadgetElement.find('.gadget-heritage-list-disabled');     fallbackElements.hide();   };    var HeritageListGadgetState = function HeritageListGadgetState() {     _classCallCheck(this, HeritageListGadgetState);      this.allListingItems = [];     this.currentListingItems = [];     this.filterListingItems = [];     this.page = 0;     this.itemsPerPage = 10;     this.view = _lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__["SearchConstants"].VIEW_FULL;     this.sortBy = _lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__["SortConstants"].DEFAULT;     this.filter = new _lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__["SearchFilter"]('', '', _lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__["SearchConstants"].PHOTO_ANY, _lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__["SearchConstants"].COORDINATES_ANY, '', '', '');   };    var ListingItem = function ListingItem(data, page, index) {     _classCallCheck(this, ListingItem);      this.data = data;     this.page = page;     this.index = index;   };    var HeritageListGadget =   /*#__PURE__*/   function () {     function HeritageListGadget(rootElement) {       var _this = this;        _classCallCheck(this, HeritageListGadget);        this.rootElement = rootElement;       this.state = new HeritageListGadgetState();       this.searchBar = new _lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__["SearchBar"](function (filter) {         return _this.updateFilterListingItems(filter);       }, function (itemsOnPage) {         return _this.updateItemsOnPage(itemsOnPage);       }, function (view) {         return _this.updateView(view);       }, function (sortBy) {         return _this.updateSort(sortBy);       });       this.dataElement = $('<div>');     }      _createClass(HeritageListGadget, [{       key: "loadData",       value: function loadData(pages) {         var _this2 = this;          var api = new _lib_mediawiki_api__WEBPACK_IMPORTED_MODULE_0__["MediawikiApi"]();          var loadPageListings = function loadPageListings(page, onSuccess) {           api.getPageText(page, function (text) {             var listings = [];             var sectionEditor = new _lib_wikitext_section_editor__WEBPACK_IMPORTED_MODULE_1__["WikitextSectionEditor"](text, 'monument');             var listingIndex = 0;              while (true) {               var listingData = sectionEditor.getListingData(listingIndex);                if (!listingData) {                 break;               }                var listingItem = new ListingItem(listingData, page, listingIndex);               listings.push(listingItem);               listingIndex++;             }              onSuccess(listings);           }, function (reason) {             window.console.error(reason);             onSuccess([]);           });         };          _lib_async_utils__WEBPACK_IMPORTED_MODULE_5__["AsyncUtils"].runSequence(pages.map(function (page) {           return function (onSuccess) {             return loadPageListings(page, onSuccess);           };         }), function (pagesListingItems) {           var allListingItems = pagesListingItems.reduce(function (pageListingItems, acc) {             return pageListingItems.concat(acc);           }, []);           _this2.state.allListingItems = allListingItems;           _this2.state.filterListingItems = allListingItems;            _this2.updateCurrentListingItems();         });       }     }, {       key: "updateCurrentListingItems",       value: function updateCurrentListingItems() {         if (this.state.itemsPerPage !== 0) {           this.state.currentListingItems = this.state.filterListingItems.slice(this.state.page * this.state.itemsPerPage, (this.state.page + 1) * this.state.itemsPerPage);         } else {           this.state.currentListingItems = this.state.filterListingItems;         }          this.renderData();       }     }, {       key: "updateView",       value: function updateView(view) {         this.state.view = view;         this.updateCurrentListingItems();       }     }, {       key: "updateItemsOnPage",       value: function updateItemsOnPage(itemsOnPage) {         this.state.itemsPerPage = itemsOnPage;         this.state.page = 0;         this.updateCurrentListingItems();       }     }, {       key: "updateSort",       value: function updateSort(sortBy) {         this.state.sortBy = sortBy;         this.updateFilteredSortedListingItems();         this.updateCurrentListingItems();       }     }, {       key: "updateFilterListingItems",       value: function updateFilterListingItems(filter) {         this.state.filter = filter;         this.state.page = 0;         this.updateFilteredSortedListingItems();         this.updateCurrentListingItems();       }     }, {       key: "updateFilteredSortedListingItems",       value: function updateFilteredSortedListingItems() {         this.state.filterListingItems = this.applySort(this.applyFilter(this.state.allListingItems, this.state.filter), this.state.sortBy);       }     }, {       key: "applySort",       value: function applySort(items, sortBy) {         var sortedItems = items.concat();          if (_lib_array_utils__WEBPACK_IMPORTED_MODULE_11__["ArrayUtils"].inArray(sortBy, [_lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__["SortConstants"].NAME, _lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__["SortConstants"].ADDRESS, _lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__["SortConstants"].TYPE])) {           sortedItems.sort(function (item1, item2) {             if (sortBy === _lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__["SortConstants"].NAME) {               return item1.data.name.localeCompare(item2.data.name);             } else if (sortBy === _lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__["SortConstants"].ADDRESS) {               return item1.data.address.localeCompare(item2.data.address);             } else if (sortBy === _lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__["SortConstants"].TYPE) {               return item1.data.type.localeCompare(item2.data.type);             }           });         }          return sortedItems;       }     }, {       key: "applyFilter",       value: function applyFilter(items, filter) {         var searchDescription = filter.getSearchDescription().toLowerCase();         var searchAddress = filter.getSearchAddress().toLowerCase();         var photo = filter.getPhoto();         var coordinates = filter.getCoordinates();         var type = filter.getType();         var style = filter.getStyle();         var protection = filter.getProtection();         return items.filter(function (item) {           return (searchDescription === '' || item.data.name.toLowerCase().indexOf(searchDescription) !== -1) && (searchAddress === '' || item.data.address.toLowerCase().indexOf(searchAddress) !== -1) && (photo === _lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__["SearchConstants"].PHOTO_ANY || photo === _lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__["SearchConstants"].PHOTO_YES && item.data.image || photo === _lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__["SearchConstants"].PHOTO_NO && !item.data.image) && (coordinates === _lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__["SearchConstants"].COORDINATES_ANY || coordinates === _lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__["SearchConstants"].COORDINATES_PRECISE && item.data.lat && item.data.long && item.data.precise === 'yes' || coordinates === _lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__["SearchConstants"].COORDINATES_NOT_PRECISE && item.data.lat && item.data.long && item.data.precise !== 'yes' || coordinates === _lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__["SearchConstants"].COORDINATES_EXISTS && item.data.lat && item.data.long || coordinates === _lib_ui_components_search_bar__WEBPACK_IMPORTED_MODULE_4__["SearchConstants"].COORDINATES_NO && (!item.data.lat || !item.data.long)) && (!type || item.data.type === type) && (!style || item.data.style === style) && (!protection || item.data.protection === protection);         });       }     }, {       key: "render",       value: function render() {         this.rootElement.empty();         this.rootElement.append(this.searchBar.render());         this.rootElement.append(this.dataElement);         this.renderData();       }     }, {       key: "exportJson",       value: function exportJson() {         var items = this.state.filterListingItems.map(function (item) {           return item.data;         });         Object(_lib_download_content__WEBPACK_IMPORTED_MODULE_9__["downloadContent"])('listings.json', JSON.stringify(items, null, 2));       }     }, {       key: "exportGpx",       value: function exportGpx() {         var items = this.state.filterListingItems.map(function (item) {           return item.data;         });         var header = '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>\n' + '<gpx version="1.1" creator="Wikivoyage"\n' + '  xmlns="http://www.topografix.com/GPX/1/1"\n' + '  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n' + '  xsi:schemaLocation="http://www.topografix.com/GPX/1/1 ' + 'http://www.topografix.com/GPX/1/1/gpx.xsd">\n';         var footer = '\n</gpx>'; // TODO proper escaping          var data = items.filter(function (item) {           return item.lat && item.long;         }).map(function (item) {           return '  <wpt lat="' + item.lat + '" lon="' + item.long + '">\n' + '    <name>' + item.name + '</name>\n' + '    <desc>' + item.address + '</desc>\n' + '  </wpt>';         }).join("\n");         Object(_lib_download_content__WEBPACK_IMPORTED_MODULE_9__["downloadContent"])('listings.gpx', header + data + footer);       }     }, {       key: "onSaveListing",       value: function onSaveListing(page, listingComponent, listingIndex, data, changesDescription, onSuccess) {         var newListingText = _lib_cultural_editor_serializer__WEBPACK_IMPORTED_MODULE_7__["CulturalEditorListingSerializer"].serializeListingData(data);         var editor = this;         var api = new _lib_mediawiki_api__WEBPACK_IMPORTED_MODULE_0__["MediawikiApi"]();         api.getPageText(page, function (text) {           var sectionEditor = new _lib_wikitext_section_editor__WEBPACK_IMPORTED_MODULE_1__["WikitextSectionEditor"](text, 'monument');           var newPageText = sectionEditor.getSectionTextWithReplacedListing(listingIndex, newListingText);           var changesDescriptionText = 'Обновлен объект "' + data.name + '"';            if (changesDescription.getDescription()) {             changesDescriptionText += ' - ' + changesDescription.getDescription();           }            _lib_mediawiki_page_wikitext__WEBPACK_IMPORTED_MODULE_8__["MediaWikiPageWikitext"].saveSectionWikitext(null, newPageText, changesDescriptionText, changesDescription.getIsMinor(), null, null, function () {             editor.loadImageThumb(listingComponent, function () {               return onSuccess();             }, true, data.image);           }, function () {             alert('Failed to save listing');           }, function () {             alert('Captcha request');           }, page);         });       }     }, {       key: "onLoadGallery",       value: function onLoadGallery(listingItem, onSuccess) {         _lib_commons_images_loader__WEBPACK_IMPORTED_MODULE_14__["CommonsImagesLoader"].loadImagesFromWLMCategory(listingItem.data.knid, function (wlmImages) {           _lib_commons_images_loader__WEBPACK_IMPORTED_MODULE_14__["CommonsImagesLoader"].loadImagesFromCommonsCategory(listingItem.data.commonscat, function (commonsImages) {             listingItem.galleryImages = new _lib_cultural_gallery_images__WEBPACK_IMPORTED_MODULE_15__["CulturalGalleryImages"](wlmImages, commonsImages);             onSuccess();           });         });       }     }, {       key: "loadImageThumb",       value: function loadImageThumb(listingComponent, onSuccess, force, newImage) {         var image = newImage ? newImage : listingComponent.listingItem.data.image;          if (image && (!listingComponent.listingItem.imageThumb || force)) {           _lib_wikivoyage_api__WEBPACK_IMPORTED_MODULE_6__["WikivoyageApi"].getImageInfo('File:' + image, function (result) {             listingComponent.listingItem.imageThumb = result.thumb;             listingComponent.onImageThumbUpdated();             onSuccess();           }, function () {             listingComponent.onImageThumbUpdated();             onSuccess();           });         } else {           listingComponent.onImageThumbUpdated();           onSuccess();         }       }     }, {       key: "renderData",       value: function renderData() {         var _this3 = this,             _this$dataElement,             _this$dataElement2;          this.dataElement.empty();         var exportPanel = new _lib_ui_components_export_panel__WEBPACK_IMPORTED_MODULE_10__["ExportPanel"](function () {           return _this3.exportJson();         }, function () {           return _this3.exportGpx();         });         this.dataElement.append(exportPanel.render());         var topPagination = this.createPagination(false);         var bottomPagination = this.createPagination(true);          (_this$dataElement = this.dataElement).append.apply(_this$dataElement, _toConsumableArray(topPagination.render()));          var listingComponents = [];         this.state.currentListingItems.forEach(function (listingItem) {           var _this3$dataElement;            var listingComponent = new _lib_ui_components_listing_item__WEBPACK_IMPORTED_MODULE_3__["ListingItemComponent"](listingItem, _this3.state.view, function () {             return _this3.onSaveListing.apply(_this3, arguments);           }, _this3.onLoadGallery);            (_this3$dataElement = _this3.dataElement).append.apply(_this3$dataElement, _toConsumableArray(listingComponent.render()));            listingComponents.push(listingComponent);         });         _lib_async_utils__WEBPACK_IMPORTED_MODULE_5__["AsyncUtils"].runSequence(listingComponents.map(function (listingComponent) {           return function (onSuccess) {             return _this3.loadImageThumb(listingComponent, onSuccess);           };         }));         var categories = [];         categories = categories.concat(this.state.currentListingItems.map(function (item) {           return 'Category:WLM/' + item.data.knid;         }));         categories = categories.concat(this.state.currentListingItems.map(function (item) {           return item.data.commonscat;         }).filter(function (commonscatValue) {           return _lib_string_utils__WEBPACK_IMPORTED_MODULE_13__["StringUtils"].emptyToString(commonscatValue) !== '';         }).map(function (commonscatValue) {           return 'Category:' + commonscatValue;         }));         _lib_commons_api__WEBPACK_IMPORTED_MODULE_12__["CommonsApi"].countCategoriesFiles(categories, function (categoriesWithImages) {           var filesCountByCategory = {};           categoriesWithImages.forEach(function (item) {             filesCountByCategory[item.category] = item.files;           });            var getCategoryFilesCount = function getCategoryFilesCount(category) {             if (_lib_string_utils__WEBPACK_IMPORTED_MODULE_13__["StringUtils"].emptyToString(category) === '') {               return 0;             }              var filesCount = filesCountByCategory[category];             return filesCount !== undefined ? filesCount : 0;           };            listingComponents.forEach(function (listingComponent) {             listingComponent.listingItem.imagesCount = getCategoryFilesCount('Category:WLM/' + listingComponent.listingItem.data.knid) + getCategoryFilesCount('Category:' + _lib_string_utils__WEBPACK_IMPORTED_MODULE_13__["StringUtils"].emptyToString(listingComponent.listingItem.data.commonscat).replace(/_'/g, ' '));             listingComponent.onUpdateImageCount();           });         });          (_this$dataElement2 = this.dataElement).append.apply(_this$dataElement2, _toConsumableArray(bottomPagination.render()));       }     }, {       key: "createPagination",       value: function createPagination(scrollToTop) {         var _this4 = this;          return new _lib_ui_components_pagination__WEBPACK_IMPORTED_MODULE_2__["PaginationComponent"](this.state.filterListingItems.length, this.state.itemsPerPage, this.state.page, function (pageNumber) {           _this4.state.page = pageNumber;            _this4.updateCurrentListingItems();            _this4.renderData();            if (scrollToTop) {             $("html, body").animate({               scrollTop: 0             }, "slow");           }         });       }     }]);      return HeritageListGadget;   }();    var showGadget = function showGadget(gadgetContentElement, gadgetSettings) {     var gadget = new HeritageListGadget(gadgetContentElement);     gadget.render();     gadget.loadData(gadgetSettings.pages);   };    $('.gadget-heritage-list').each(function (index, gadgetElement) {     return initGadget($(gadgetElement));   }); });  /***/ }), /* 2 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MediawikiApi", function() { return MediawikiApi; }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }  var MediawikiApi = /*#__PURE__*/ function () {   function MediawikiApi() {     _classCallCheck(this, MediawikiApi);   }    _createClass(MediawikiApi, [{     key: "getPageText",     value: function getPageText(pageUrl, onSuccess, onError) {       $.ajax({         // TODO ability to specify URL         url: mw.util.wikiScript(''),         data: {           title: pageUrl,           action: 'raw'         },         cache: false       }).done(function (data) {         onSuccess(data);       }).fail(function (jqXHR, textStatus, errorThrown) {         onError(new Error('Ошибка при получении исходного вики-текста статьи: ' + textStatus + ' ' + errorThrown));       });     }   }]);    return MediawikiApi; }();  /***/ }), /* 3 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WikitextSectionEditor", function() { return WikitextSectionEditor; }); /* harmony import */ var _wikitext_parser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }   var WikitextSectionEditor = /*#__PURE__*/ function () {   function WikitextSectionEditor(sectionText, listingName) {     _classCallCheck(this, WikitextSectionEditor);      this._sectionText = sectionText;     this._listingName = listingName;     this._commentReplacements = {};      this._stripComments();   }    _createClass(WikitextSectionEditor, [{     key: "getListingData",     value: function getListingData(listingIndex) {       var listingText = _wikitext_parser__WEBPACK_IMPORTED_MODULE_0__["WikitextParser"].getListingWikitextBraces(this._sectionText, this._listingName, listingIndex);        if (!listingText) {         return null;       }        var listingData = _wikitext_parser__WEBPACK_IMPORTED_MODULE_0__["WikitextParser"].wikiTextToListing(listingText);        for (var key in listingData) {         if (!listingData.hasOwnProperty(key)) {           continue;         }          listingData[key] = this._restoreComments(listingData[key]);       }        return listingData;     }   }, {     key: "getSectionTextWithReplacedListing",     value: function getSectionTextWithReplacedListing(listingIndex, newListingText) {       var oldListingText = _wikitext_parser__WEBPACK_IMPORTED_MODULE_0__["WikitextParser"].getListingWikitextBraces(this._sectionText, this._listingName, listingIndex);       var result = this._sectionText;       result = result.replace(oldListingText, newListingText);       result = this._restoreComments(result);       return result;     }   }, {     key: "getSectionTextWithAddedListing",     value: function getSectionTextWithAddedListing(newListingText) {       var result = this._sectionText;       var index = result.indexOf('{{footer');        if (index > 0) {         result = result.substr(0, index) + '\n' + newListingText + '\n' + result.substr(index);       } else {         result += '\n' + newListingText;       }        result = this._restoreComments(result);       return result;     }     /**      * Commented-out listings can result in the wrong listing being edited, so      * strip out any comments and replace them with placeholders that can be      * restored prior to saving changes.      */    }, {     key: "_stripComments",     value: function _stripComments() {       var comments = this._sectionText.match(/<!--[\s\S]*?-->/mig);        if (comments !== null) {         for (var i = 0; i < comments.length; i++) {           var comment = comments[i];           var rep = '<<<COMMENT' + i + '>>>';           this._sectionText = this._sectionText.replace(comment, rep);           this._commentReplacements[rep] = comment;         }       }     }     /**      * Search the text provided, and if it contains any text that was      * previously stripped out for replacement purposes, restore it.      */    }, {     key: "_restoreComments",     value: function _restoreComments(sectionText) {       for (var key in this._commentReplacements) {         var val = this._commentReplacements[key];         sectionText = sectionText.replace(key, val);       }        return sectionText;     }   }]);    return WikitextSectionEditor; }();  /***/ }), /* 4 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WikitextParser", function() { return WikitextParser; }); /* harmony import */ var _string_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);  var WikitextParser = {   /**    * Given a listing index, return the full wikitext for that listing    * ("{{listing|key=value|...}}"). An index of 0 returns the first listing    * template invocation, 1 returns the second, etc.    */   getListingWikitextBraces: function getListingWikitextBraces(wikitext, listingName, listingIndex) {     // find the listing wikitext that matches the same index as the listing index     var listingRegex = new RegExp('{{\\s*(' + listingName + ')(\\s|\\|)', 'ig'); // look through all matches for "{{listing|see|do...}}" within the section     // wikitext, returning the nth match, where 'n' is equal to the index of the     // edit link that was clicked      var listingSyntax, regexResult, listingMatchIndex;      for (var i = 0; i <= listingIndex; i++) {       regexResult = listingRegex.exec(wikitext);        if (!regexResult) {         return null;       }        listingMatchIndex = regexResult.index;       listingSyntax = regexResult[0];     } // listings may contain nested templates, so step through all section     // text after the matched text to find MATCHING closing braces     // the first two braces are matched by the listing regex and already     // captured in the listingSyntax variable       var curlyBraceCount = 2;     var endPos = wikitext.length;     var startPos = listingMatchIndex + listingSyntax.length;     var matchFound = false;      for (var j = startPos; j < endPos; j++) {       if (wikitext[j] === '{') {         ++curlyBraceCount;       } else if (wikitext[j] === '}') {         --curlyBraceCount;       }        if (curlyBraceCount === 0 && j + 1 < endPos) {         listingSyntax = wikitext.substring(listingMatchIndex, j + 1);         matchFound = true;         break;       }     }      if (!matchFound) {       listingSyntax = wikitext.substring(listingMatchIndex);     }      return _string_utils__WEBPACK_IMPORTED_MODULE_0__["StringUtils"].trim(listingSyntax);   },    /**    * Convert raw wiki listing syntax into a mapping of key-value pairs    * corresponding to the listing template parameters.    */   wikiTextToListing: function wikiTextToListing(wikitext) {     // remove the trailing braces if there are some     for (var i = 0; i < 2; i++) {       if (wikitext[wikitext.length - 1] === '}') {         wikitext = wikitext.slice(0, -1);       }     }      var listingData = {};     var lastKey;     var listParams = WikitextParser.listingTemplateToParamsArray(wikitext);      for (var _i = 1; _i < listParams.length; _i++) {       var param = listParams[_i];       var index = param.indexOf('=');        if (index > 0) {         // param is of the form key=value         var key = _string_utils__WEBPACK_IMPORTED_MODULE_0__["StringUtils"].trim(param.substr(0, index));         listingData[key] = _string_utils__WEBPACK_IMPORTED_MODULE_0__["StringUtils"].trim(param.substr(index + 1));         lastKey = key;       } else if (listingData[lastKey].length) {         // there was a pipe character within a param value, such as         // "key=value1|value2", so just append to the previous param         listingData[lastKey] += '|' + param;       }     }      return listingData;   },    /**    * Split the raw template wikitext into an array of params. The pipe    * symbol delimits template params, but this method will also inspect the    * description to deal with nested templates or wikilinks that might contain    * pipe characters that should not be used as delimiters.    */   listingTemplateToParamsArray: function listingTemplateToParamsArray(wikitext) {     var results = [];     var paramValue = '';     var pos = 0;      while (pos < wikitext.length) {       var remainingString = wikitext.substr(pos); // check for a nested template or wikilink        var patternMatch = WikitextParser.findPatternMatch(remainingString, "{{", "}}");        if (patternMatch.length === 0) {         patternMatch = WikitextParser.findPatternMatch(remainingString, "[[", "]]");       }        if (patternMatch.length > 0) {         paramValue += patternMatch;         pos += patternMatch.length;       } else if (wikitext.charAt(pos) === '|') {         // delimiter - push the previous param and move on to the next         results.push(paramValue);         paramValue = '';         pos++;       } else {         // append the character to the param value being built         paramValue += wikitext.charAt(pos);         pos++;       }     }      if (paramValue.length > 0) {       // append the last param value       results.push(paramValue);     }      return results;   },    /**    * Utility method for finding a matching end pattern for a specified start    * pattern, including nesting.  The specified value must start with the    * start value, otherwise an empty string will be returned.    */   findPatternMatch: function findPatternMatch(value, startPattern, endPattern) {     var matchString = '';     var startRegex = new RegExp('^' + WikitextParser.replaceSpecial(startPattern), 'i');      if (startRegex.test(value)) {       var endRegex = new RegExp('^' + WikitextParser.replaceSpecial(endPattern), 'i');       var matchCount = 1;        for (var i = startPattern.length; i < value.length; i++) {         var remainingValue = value.substr(i);          if (startRegex.test(remainingValue)) {           matchCount++;         } else if (endRegex.test(remainingValue)) {           matchCount--;         }          if (matchCount === 0) {           matchString = value.substr(0, i);           break;         }       }     }      return matchString;   },   replaceSpecial: function replaceSpecial(str) {     return str.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&");   } };  /***/ }), /* 5 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StringUtils", function() { return StringUtils; }); var StringUtils = {   contains: function contains(string, substring) {     return string.indexOf(substring) >= 0;   },   trim: function trim(string) {     // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim     return string.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');   },   emptyToString: function emptyToString(value) {     if (value === undefined || value === null) {       return '';     } else {       return value;     }   } };  /***/ }), /* 6 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PaginationComponent", function() { return PaginationComponent; }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }  var PaginationComponent = /*#__PURE__*/ function () {   function PaginationComponent(itemsCount, itemsPerPage, currentPage, setPageFunction) {     _classCallCheck(this, PaginationComponent);      this.itemsPerPage = itemsPerPage;      if (this.itemsPerPage !== 0) {       this.pagesCount = Math.ceil(itemsCount / itemsPerPage);     }      this.setPageFunction = setPageFunction;     this.currentPage = currentPage;   }    _createClass(PaginationComponent, [{     key: "render",     value: function render() {       if (this.itemsPerPage === 0 || this.pagesCount < 2) {         return [];       }        var firstPage = 0;       var previousPage = this.currentPage > 0 ? this.currentPage - 1 : null;       var lastPage = this.pagesCount - 1;       var nextPage = this.currentPage < this.pagesCount - 1 ? this.currentPage + 1 : null;       var pagesDistance = 3;       var paginationElement = $('<div style="display: flex; flex-direction: row;">');       paginationElement.append(this.createPaginationItemElement('<<', firstPage));       paginationElement.append(this.createPaginationItemElement('<', previousPage));       var startPage = Math.max(0, this.currentPage - pagesDistance);       var endPage = Math.min(this.pagesCount - 1, this.currentPage + pagesDistance + 1);        if (startPage !== firstPage) {         paginationElement.append(this.createMoreItemsElement());       }        for (var pageNumber = startPage; pageNumber < this.currentPage; pageNumber++) {         paginationElement.append(this.createPaginationItemElement(pageNumber, pageNumber));       }        paginationElement.append(this.createPaginationItemElement(this.currentPage, this.currentPage));        for (var _pageNumber = this.currentPage + 1; _pageNumber < endPage + 1; _pageNumber++) {         paginationElement.append(this.createPaginationItemElement(_pageNumber, _pageNumber));       }        if (endPage !== lastPage) {         paginationElement.append(this.createMoreItemsElement());       }        paginationElement.append(this.createPaginationItemElement('>', nextPage));       paginationElement.append(this.createPaginationItemElement('>>', lastPage));       return [paginationElement];     }   }, {     key: "createMoreItemsElement",     value: function createMoreItemsElement() {       return $('<div>').attr('style', 'padding-right: 3px;').text('...');     }   }, {     key: "createPaginationItemElement",     value: function createPaginationItemElement(title, pageNumber) {       var _this = this;        var isActive = pageNumber !== null && pageNumber !== this.currentPage;       var paginationItemElement = $('<div>').text('[' + title + ']').attr('style', isActive ? 'padding-right: 3px; color: blue; cursor: pointer;' : 'padding-right: 3px;');        if (isActive) {         paginationItemElement.click(function () {           _this.setPageFunction(pageNumber);         });       }        return paginationItemElement;     }   }]);    return PaginationComponent; }();  /***/ }), /* 7 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ListingItemComponent", function() { return ListingItemComponent; }); /* harmony import */ var _cultural_monument_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8); /* harmony import */ var _cultural_monument_styles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9); /* harmony import */ var _cultural_monument_protections__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(10); /* harmony import */ var _regions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(11); /* harmony import */ var _validation_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(12); /* harmony import */ var _listing_item_icons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(13); /* harmony import */ var _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(14); /* harmony import */ var _search_bar__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(16); /* harmony import */ var _changes_description__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(17); /* harmony import */ var _string_utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(5); /* harmony import */ var _array_utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(18); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }             var ListingItemComponent = /*#__PURE__*/ function () {   function ListingItemComponent(listingItem, view, onSaveListing, onLoadGallery) {     _classCallCheck(this, ListingItemComponent);      this.view = view;     this.listingItem = listingItem;     this.listingItemContainer = $('<div>');     this.onSaveListing = onSaveListing;     this.onLoadGallery = onLoadGallery;     this._mode = MODES.VIEW;     this._listingTable = null;     this._listingDataRow = null;     this._listingGalleryRow = null;   }    _createClass(ListingItemComponent, [{     key: "render",     value: function render() {       this.listingItemContainer.append(this.renderView());       return [this.listingItemContainer, $('<hr/>')];     }   }, {     key: "renderView",     value: function renderView() {       if (this.view === _search_bar__WEBPACK_IMPORTED_MODULE_7__["SearchConstants"].VIEW_COMPACT) {         return this.renderViewCompact();       } else {         return this.renderViewFull();       }     }   }, {     key: "renderViewFull",     value: function renderViewFull() {       var _this = this;        var listingData = this.listingItem.data;       this.imageCellComponent = new ImageCellComponent(listingData, this.listingItem.imageThumb, this.listingItem.imagesCount, function () {         return _this.onToggleGallery();       });       var imageCell = this.imageCellComponent.render();       this.dataCell = $('<td style="padding-left:10px;" valign="middle">');       this.renderDataCellView();       var uploadCellComponent = new UploadCellComponent(listingData);       var uploadCell = uploadCellComponent.render();       this._listingDataRow = $('<tr valign="top">');        this._listingDataRow.append(imageCell);        this._listingDataRow.append(this.dataCell);        this._listingDataRow.append(uploadCell);        this.galleryRowComponent = new GalleryRowComponent(function (image) {         return _this.onSelectImage(image);       });       this._listingGalleryRow = this.galleryRowComponent.render();       this.galleryRowComponent.onModeUpdate(this._mode);       this._listingTable = $('<table class="monument" border="0" style="font-size:97%; width:100%;">');        this._listingTable.append(this._listingDataRow);        this._listingTable.append(this._listingGalleryRow);        this._updateListingDataStatus();        return this._listingTable;     }   }, {     key: "_updateListingDataStatus",     value: function _updateListingDataStatus() {       var listingData = this.listingItem.data;        if (!this._listingDataRow) {         return;       }        if (this._mode === MODES.VIEW && listingData.status === 'destroyed') {         this._listingDataRow.css('color', '#808080');       } else {         this._listingDataRow.css('color', '#000000');       }     }   }, {     key: "renderDataCellView",     value: function renderDataCellView() {       var _this2 = this;        this._mode = MODES.VIEW;       this.updateMode();       var listingData = this.listingItem.data;       this.dataCell.empty();       var viewComponent = new ViewComponent(this.dataCell, listingData, function () {         _this2.renderDataCellEdit();          _this2._updateListingDataStatus();       });       viewComponent.render();     }   }, {     key: "renderDataCellEdit",     value: function renderDataCellEdit() {       var _this3 = this;        this._mode = MODES.EDIT;       this.updateMode();       var listingData = this.listingItem.data;       this.dataCell.empty();       this._editComponent = new EditorComponent(this.dataCell, listingData, function () {         return _this3.onEditDiscard();       }, function (values, changes) {         return _this3.onEditSave(values, changes);       });        this._editComponent.render();     }   }, {     key: "updateMode",     value: function updateMode() {       if (this.galleryRowComponent) {         this.galleryRowComponent.onModeUpdate(this._mode);       }     }   }, {     key: "onImageThumbUpdated",     value: function onImageThumbUpdated() {       this.imageCellComponent.onImageThumbUpdated(this.listingItem.imageThumb);     }   }, {     key: "onUpdateImageCount",     value: function onUpdateImageCount() {       this.imageCellComponent.onUpdateImageCount(this.listingItem.imagesCount);     }   }, {     key: "onEditDiscard",     value: function onEditDiscard() {       this.renderDataCellView();        this._updateListingDataStatus();     }   }, {     key: "onEditSave",     value: function onEditSave(values, changesDescription) {       var _this4 = this;        var onSaveSuccessful = function onSaveSuccessful() {         _this4.listingItem.data = values;          _this4.renderDataCellView();          _this4._updateListingDataStatus();       };        if (this.onSaveListing) {         this.onSaveListing(this.listingItem.page, this, this.listingItem.index, values, changesDescription, onSaveSuccessful);       } else {         onSaveSuccessful();       }     }   }, {     key: "onToggleGallery",     value: function onToggleGallery() {       var _this5 = this;        if (!this.listingItem.galleryImages) {         this.onLoadGallery(this.listingItem, function () {           _this5.onGalleryUpdated();         });       }        this.galleryRowComponent.toggle();     }   }, {     key: "onGalleryUpdated",     value: function onGalleryUpdated() {       this.galleryRowComponent.setGalleryImages(this.listingItem.galleryImages);     }   }, {     key: "onSelectImage",     value: function onSelectImage(image) {       if (this._editComponent) {         this._editComponent.setImage(image);       }     }   }, {     key: "renderViewCompact",     value: function renderViewCompact() {       var listingData = this.listingItem.data;       return $('<div>').append($('<b>').text(listingData.name)).append($('<br/>')).append(listingData.address);     }   }]);    return ListingItemComponent; }();  var ImageCellComponent = /*#__PURE__*/ function () {   function ImageCellComponent(listingData, imageThumb, galleryImagesCount, onToggleGallery) {     _classCallCheck(this, ImageCellComponent);      this._listingData = listingData;     this._imageThumb = imageThumb;     this._galleryImagesCount = galleryImagesCount;     this._onToggleGallery = onToggleGallery;   }    _createClass(ImageCellComponent, [{     key: "render",     value: function render() {       var _this6 = this;        var imageCell = $('<td width="160px;">');       this.image = this.renderImage();       imageCell.append(this.image);       this.galleryLink = $('<a style="display: none;">');       this.galleryLink.click(function () {         return _this6._onToggleGallery();       });       imageCell.append($('<div style="text-align: center;">').append(this.galleryLink));       return imageCell;     }   }, {     key: "onImageThumbUpdated",     value: function onImageThumbUpdated(imageThumb) {       this._imageThumb = imageThumb;       this.renderImageThumb();     }   }, {     key: "onUpdateImageCount",     value: function onUpdateImageCount(galleryImagesCount) {       this._galleryImagesCount = galleryImagesCount;        if (!this.galleryLink) {         return;       }        if (this._galleryImagesCount > 0) {         this.galleryLink.show();         this.galleryLink.text('смотреть фото (' + this._galleryImagesCount + ')');       } else {         this.galleryLink.hide();       }     }   }, {     key: "renderImageThumb",     value: function renderImageThumb() {       if (this.image && this._listingData.image && this._imageThumb) {         this.image.attr('src', this._imageThumb);       }     }   }, {     key: "renderImage",     value: function renderImage() {       var image = $('<img>');       image.attr('src', 'https://upload.wikimedia.org/' + 'wikipedia/commons/thumb/c/ca/Village_without_photo.svg/150px-Village_without_photo.svg.png');        if (this._listingData.image) {         image.attr('alt', this._listingData.name);       } else {         image.attr('alt', 'Нет фото');         image.attr('class', 'thumbborder');       }        this.renderImageThumb();       return image;     }   }]);    return ImageCellComponent; }();  var UploadCellComponent = /*#__PURE__*/ function () {   function UploadCellComponent(listingData) {     _classCallCheck(this, UploadCellComponent);      this._listingData = listingData;   }    _createClass(UploadCellComponent, [{     key: "render",     value: function render() {       return $('<td>').attr('style', 'width:10%; ' + 'text-align: center; ' + 'vertical-align: middle; ' + 'font-size: 120%; ' + 'background-color: #FFFACD').append($('<a>').attr('href', this.composeUploadUrl()).attr('class', 'external text').text('Загрузить фото'));     }   }, {     key: "composeUploadUrl",     value: function composeUploadUrl() {       var params = {         title: 'Special:UploadWizard',         campaign: this._listingData.campaign,         id: this._listingData.knid,         id2: this._listingData.uid,         // TODO full description         description: this._listingData.description,         categories: this._listingData.commonscat,         userlang: 'ru'       }; // TODO check how URL encoding works with spaces        return 'http://commons.wikimedia.org/w/index.php?' + $.param(params);     }   }]);    return UploadCellComponent; }();  var ViewComponent = /*#__PURE__*/ function () {   function ViewComponent(container, listingData, onEdit) {     _classCallCheck(this, ViewComponent);      this._container = container;     this._listingData = listingData;     this._onEdit = onEdit;   }    _createClass(ViewComponent, [{     key: "render",     value: function render() {       var _this7 = this;        var isMainComplexElement = this._listingData.complex && this._listingData.complex === this._listingData.knid;        var cardBackgroundColor = this._getCardBackgroundColor();        if (cardBackgroundColor) {         this._container.css({           'background-color': cardBackgroundColor         });       }        if (this._listingData.type === 'architecture') {         this._container.append(_listing_item_icons__WEBPACK_IMPORTED_MODULE_5__["ListingItemIcons"].MonumentType.createArchitectureIcon());       } else if (this._listingData.type === 'history') {         this._container.append(_listing_item_icons__WEBPACK_IMPORTED_MODULE_5__["ListingItemIcons"].MonumentType.createHistoryIcon());       } else if (this._listingData.type === 'archeology') {         this._container.append(_listing_item_icons__WEBPACK_IMPORTED_MODULE_5__["ListingItemIcons"].MonumentType.createArcheologyIcon());       } else if (this._listingData.type === 'monument') {         this._container.append(_listing_item_icons__WEBPACK_IMPORTED_MODULE_5__["ListingItemIcons"].MonumentType.createMonumentIcon());       }        this._container.append('&nbsp;');        if (isMainComplexElement) {         this._container.append(_listing_item_icons__WEBPACK_IMPORTED_MODULE_5__["ListingItemIcons"].createComplexMainElementIcon());          this._container.append('&nbsp;');       }        var itemNameElement = $('<span class="monument-name" style="font-size:115%; font-weight:bold">');       itemNameElement.text(this._listingData.name);        this._container.append(itemNameElement);        var editButton = this.renderEditButton(); // TODO handle only click on image        editButton.click(function () {         _this7._onEdit();       });        this._container.append(editButton);        this._container.append($('<br/>'));        this._container.append($('<i>').text('Адрес: '));        if (this._listingData.municipality) {         this._container.append($('<i>').text(this._listingData.municipality));       }        if (this._listingData.munid) {         this._container.append('&nbsp;'); // TODO urlencode           this._container.append($('<a>').attr('href', 'http://wikidata.org/wiki/' + this._listingData.munid).append(_listing_item_icons__WEBPACK_IMPORTED_MODULE_5__["ListingItemIcons"].createMunidIcon()));       }        if (this._listingData.block) {         this._container.append(', квартал ' + this._listingData.block);       }        if (this._listingData.address) {         if (this._listingData.municipality) {           this._container.append(',&nbsp;');         }          this._container.append(this._listingData.address);       }        this._container.append($('<br/>'));        this._container.append($('<i>').text('Номер объекта: '));        var knidSpan = $('<span>').attr('id', this._listingData.knid).text(this._listingData.knid);        if (this._listingData['knid-new']) {         knidSpan.append('&nbsp;&nbsp;/&nbsp;&nbsp;').append($('<abbr>').attr('title', '15-значный номер в Едином государственном реестре').append($('<a>').attr('href', 'https://tools.wmflabs.org/ru_monuments/get_info.php?id=' + this._listingData['knid-new']).text(this._listingData['knid-new'])));       } // TODO: listing data UID         this._container.append($('<span style="font-size:93%">').append(knidSpan));        this._container.append('&nbsp;&nbsp;&nbsp;');        this._container.append($('<i>').text('Ссылки:'));        this._container.append('&nbsp;');        if (this._listingData.lat && this._listingData.long) {         this._container.append($('<a>') // TODO correct link & escaping         .attr('href', 'https://tools.wmflabs.org/wikivoyage/w/monmap1.php?lat=' + this._listingData.lat + '&lon=' + this._listingData.long + '&zoom=13&layer=OX&lang=ru').append(_listing_item_icons__WEBPACK_IMPORTED_MODULE_5__["ListingItemIcons"].createMapIcon()));          if (this._listingData.precise !== 'yes') {           this._container.append($('<span style="color:#FF0000">!</span>'));         }          this._container.append('&nbsp;');       }        if (this._listingData.wiki) {         this._container.append($('<a>').attr('alt', 'Статья в Википедии') // TODO urlencode         .attr('href', 'http://ru.wikipedia.org/wiki/' + this._listingData.wiki).append(_listing_item_icons__WEBPACK_IMPORTED_MODULE_5__["ListingItemIcons"].createWikipediaIcon()));       }        if (this._listingData.commonscat) {         this._container.append($('<a>').attr('alt', 'Категория на Викискладе') // TODO urlencode         .attr('href', 'http://commons.wikimedia.org/wiki/Category:' + this._listingData.commonscat).append(_listing_item_icons__WEBPACK_IMPORTED_MODULE_5__["ListingItemIcons"].createCommonsIcon()));          this._container.append('&thinsp;&thinsp;');       }        if (this._listingData.wdid) {         this._container.append($('<a>').attr('alt', 'Элемент в Викиданных') // TODO urlencode         .attr('href', 'http://www.wikidata.org/wiki/' + this._listingData.wdid).append(_listing_item_icons__WEBPACK_IMPORTED_MODULE_5__["ListingItemIcons"].createWikidataIcon()));       } // TODO external links         this._container.append($('<a>').attr('href', 'https://commons.wikimedia.org/wiki/Category:WLM/' + this._listingData.knid).text('галерея'));        this._container.append('<br>');        this._container.append($('<i>').text('Описание:'));        var descriptionComponents = [];        if (this._listingData.year) {         descriptionComponents.push(this._listingData.year);       }        if (this._listingData.author) {         descriptionComponents.push(this._listingData.author);       }        if (descriptionComponents.length > 0) {         this._container.append(descriptionComponents.join(', ') + '.');       }        var typeText = '';        if (this._listingData.type === 'architecture') {         typeText = 'Памятник архитектуры';       } else if (this._listingData.type === 'history') {         typeText = 'Памятник истории';       } else if (this._listingData.type === 'archeology') {         typeText = 'Памятник археологии';       } else if (this._listingData.type === 'monument') {         typeText = 'Памятник монументального искусства';       }        this._container.append(' ' + typeText);        var protectionText = '';        if (this._listingData.protection === 'Ф') {         protectionText = '&nbsp;федерального значения';       } else if (this._listingData.protection === 'Р') {         protectionText = '&nbsp;регионального значения';       } else if (this._listingData.protection === 'М') {         protectionText = '&nbsp;местного значения';       } else if (this._listingData.protection === 'В') {         protectionText = ', выявленный';       }        if (protectionText) {         this._container.append(protectionText);       } // TODO documents      }   }, {     key: "renderEditButton",     value: function renderEditButton() {       var editListingButton = $('<span>').attr({         'class': 'vcard-edit-button noprint',         'style': 'padding-left: 5px;'       });       var editListingLink = $('<a>').attr({         'class': 'icon-pencil',         'title': 'Редактировать'       }).text('Редактировать');       editListingButton.append(editListingLink);       return editListingButton;     }   }, {     key: "_getCardBackgroundColor",     value: function _getCardBackgroundColor() {       var knid = this._listingData.knid;       var complex = this._listingData.complex;        if (!knid) {         return '';       }        var isOfficial = !(knid % 100000000 >= 40000000 && knid % 100000000 <= 49999999);       var isMainComplexElement = knid === complex;        if (isOfficial) {         if (complex) {           if (isMainComplexElement) {             return '#baffc1';           } else {             return '#e1ffe4';           }         } else {           return '#f8f8f8';         }       } else {         if (complex) {           if (isMainComplexElement) {             return '#cdeefe';           } else {             return '#ebf5f9';           }         } else {           return '#f8f8ed';         }       }     }   }]);    return ViewComponent; }();  var EditorComponent = /*#__PURE__*/ function () {   function EditorComponent(container, listingData, onDiscard, onSave) {     _classCallCheck(this, EditorComponent);      this._container = container;     this._listingData = listingData;     this._onDiscard = onDiscard;     this._onSave = onSave;   }    _createClass(EditorComponent, [{     key: "setImage",     value: function setImage(image) {       this._inputImage.val(image);        this._onValueChange();     }   }, {     key: "render",     value: function render() {       var _this8 = this;        this._container.css({         'background-color': '#FFFFFF'       });        var inputName = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInputLarge();       var inputRegion = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createSelector(_regions__WEBPACK_IMPORTED_MODULE_3__["regions"].map(function (region) {         return {           title: region.getTitle(),           value: region.getId()         };       }));       var inputDistrict = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInput();       var inputMunicipality = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInput();       var inputBlock = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInput();       var inputAddress = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInput();       var inputLat = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInputSmall();       var inputLong = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInputSmall();       var inputPrecise = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createCheckboxInput();       var inputStyle = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createSelector(_cultural_monument_styles__WEBPACK_IMPORTED_MODULE_1__["culturalMonumentStyles"].map(function (culturalMonumentStyle) {         return {           title: culturalMonumentStyle.getTitle(),           value: culturalMonumentStyle.getValue()         };       }));       var inputType = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createSelector(_cultural_monument_types__WEBPACK_IMPORTED_MODULE_0__["culturalMonumentTypes"].map(function (culturalMonumentType) {         return {           title: culturalMonumentType.getTitle(),           value: culturalMonumentType.getValue()         };       }));       var inputProtection = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createSelector(_cultural_monument_protections__WEBPACK_IMPORTED_MODULE_2__["culturalMonumentProtections"].map(function (culturalMonumentProtection) {         return {           title: culturalMonumentProtection.getTitle(),           value: culturalMonumentProtection.getValue()         };       }));       var inputYear = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInputSmall();       var inputAuthor = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInput();       var inputDestroyed = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createCheckboxInput();       this._inputImage = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInput();       var inputWikipedia = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInput();       var inputWikidata = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInputSmall();       var inputCommons = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInput();       var inputMunid = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInputSmall();       var inputDocument = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInput();       var inputLink = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInput();       var inputLinkExtra = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInput();       var inputKnid = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInput(10);       var inputComplex = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInput(10);       var inputKnidNew = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInput(15);       var inputDescription = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextarea();       var allInputs = [inputName, inputType, inputRegion, inputDistrict, inputMunicipality, inputBlock, inputAddress, inputLat, inputLong, inputYear, inputAuthor, inputKnid, inputComplex, inputKnidNew, this._inputImage, inputWikipedia, inputWikidata, inputCommons, inputMunid, inputDocument, inputLink, inputLinkExtra, inputDescription, inputProtection, inputStyle, inputDestroyed, inputPrecise];       var directMappingInputs = {         name: inputName,         type: inputType,         region: inputRegion,         district: inputDistrict,         municipality: inputMunicipality,         block: inputBlock,         address: inputAddress,         lat: inputLat,         long: inputLong,         year: inputYear,         author: inputAuthor,         knid: inputKnid,         complex: inputComplex,         'knid-new': inputKnidNew,         image: this._inputImage,         wiki: inputWikipedia,         wdid: inputWikidata,         commonscat: inputCommons,         munid: inputMunid,         document: inputDocument,         link: inputLink,         linkextra: inputLinkExtra,         description: inputDescription,         protection: inputProtection       };        var setValues = function setValues(listing) {         Object.keys(directMappingInputs).forEach(function (key) {           if (listing[key]) {             directMappingInputs[key].val(listing[key]);           }         });          if (listing['style']) {           inputStyle.val(listing['style'].toLowerCase());         }          inputDestroyed.attr('checked', listing['status'] === 'destroyed');         inputPrecise.attr('checked', listing['precise'] === 'yes');       };        var getValues = function getValues() {         var listingData = {};         Object.keys(directMappingInputs).forEach(function (key) {           listingData[key] = directMappingInputs[key].val();         });          if (inputDestroyed.is(':checked')) {           listingData['status'] = 'destroyed';         } else {           listingData['status'] = '';         }          if (inputPrecise.is(':checked')) {           listingData['precise'] = 'yes';         } else {           listingData['precise'] = 'no';         }          listingData['link'] = _validation_utils__WEBPACK_IMPORTED_MODULE_4__["ValidationUtils"].normalizeUrl(listingData['link']);         listingData['linkextra'] = _validation_utils__WEBPACK_IMPORTED_MODULE_4__["ValidationUtils"].normalizeUrl(listingData['linkextra']);         listingData['style'] = inputStyle.val();         return listingData;       };        setValues(this._listingData);       var nameRow = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormRow('Название:').append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement(null, inputName)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createInsertSymbols(inputName));        this._container.append(nameRow);        var addressRow = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormRow('Адрес:').append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Регион', inputRegion)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Район', inputDistrict)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Населенный пункт', inputMunicipality)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Квартал', inputBlock)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Улица, дом', inputAddress));        this._container.append(addressRow);        var coordRow = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormRow('Координаты: ').append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Широта', inputLat)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Долгота', inputLong)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Заданы точно?', inputPrecise));        this._container.append(coordRow);        var propsRow = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormRow('Свойства: ').append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Тип', inputType)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Стиль', inputStyle)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Категория охраны', inputProtection)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Год', inputYear)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Автор', inputAuthor)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Утрачен', inputDestroyed));        this._container.append(propsRow);        var linksRow = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormRow('Ссылки: ').append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Изображение', this._inputImage)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Википедия', inputWikipedia)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Викиданные', inputWikidata)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Викисклад', inputCommons)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Викиданные нас. пункта', inputMunid)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Код документа', inputDocument)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Ссылка №1', inputLink)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('Ссылка №2', inputLinkExtra));        this._container.append(linksRow);        var numbersRow = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormRow('Номера: ').append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('10-значный № объекта', inputKnid)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('10-значный № комплекса', inputComplex)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('15-значный № объекта', inputKnidNew));        this._container.append(numbersRow);        var descriptionRow = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormRow('Описание:').append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement(null, inputDescription));        this._container.append(descriptionRow);        var inputChanges = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createTextInputLarge();       var inputIsMinor = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createCheckboxInput();       var changesDescriptionRow = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormRow('Описание изменений: ').append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement(null, inputChanges)).append(_listing_item_form_composer__WEBPACK_IMPORTED_MODULE_6__["ListingItemFormComposer"].createFormElement('незначительные?', inputIsMinor));       changesDescriptionRow.css('border-top', '1px dotted gray');       changesDescriptionRow.css('border-bottom', '1px dotted gray');       changesDescriptionRow.css('margin-top', '3px');       var changesChanged = false;       inputChanges.change(function () {         changesChanged = true;       });        this._onValueChange = function () {         if (!changesChanged) {           var values = getValues();           var originalData = _this8._listingData;           var changedItems = [];           Object.keys(values).forEach(function (key) {             if (_string_utils__WEBPACK_IMPORTED_MODULE_9__["StringUtils"].emptyToString(originalData[key]) !== _string_utils__WEBPACK_IMPORTED_MODULE_9__["StringUtils"].emptyToString(values[key])) {               changedItems.push(key);             }           });            if (_array_utils__WEBPACK_IMPORTED_MODULE_10__["ArrayUtils"].consistsOnlyOf(changedItems, ['name'])) {             inputChanges.val('название');           } else if (_array_utils__WEBPACK_IMPORTED_MODULE_10__["ArrayUtils"].consistsOnlyOf(changedItems, ['image'])) {             inputChanges.val('изображение');           } else if (_array_utils__WEBPACK_IMPORTED_MODULE_10__["ArrayUtils"].consistsOnlyOf(changedItems, ['address'])) {             inputChanges.val('адрес');           } else if (_array_utils__WEBPACK_IMPORTED_MODULE_10__["ArrayUtils"].consistsOnlyOf(changedItems, ['lat', 'long', 'precise'])) {             inputChanges.val('координаты');           } else {             inputChanges.val('');           }         }       };        allInputs.forEach(function (input) {         return input.change(_this8._onValueChange);       });        this._container.append(changesDescriptionRow);        var buttonsBlock = $('<div>').attr('class', 'ui-dialog-buttonset');       var buttonDiscard = this.renderButton('Отменить');       var buttonSave = this.renderButton('Сохранить');       buttonsBlock.append(buttonDiscard);       buttonsBlock.append(buttonSave);       buttonDiscard.click(function () {         _this8._onDiscard();       });       buttonSave.click(function () {         var values = getValues();         var changesDescription = new _changes_description__WEBPACK_IMPORTED_MODULE_8__["ChangesDescription"](inputChanges.val(), inputIsMinor.is(':checked'));          _this8._onSave(values, changesDescription);       });        this._container.append(buttonsBlock);     }   }, {     key: "renderButton",     value: function renderButton(buttonText) {       return $('<button>').attr('class', 'ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only').append($('<span>').attr('class', 'ui-button-text').text(buttonText));     }   }]);    return EditorComponent; }();  var GalleryRowComponent = /*#__PURE__*/ function () {   function GalleryRowComponent(onSelectImage) {     _classCallCheck(this, GalleryRowComponent);      this._onSelectImage = onSelectImage;   }    _createClass(GalleryRowComponent, [{     key: "render",     value: function render() {       this._galleryContents = $('<td colspan="2">');       this._galleryComponent = new GalleryComponent(this._galleryContents, this._onSelectImage);        this._galleryComponent.render();        this._galleryRow = $('<tr style="display: none;">').append(this._galleryContents);       return this._galleryRow;     }   }, {     key: "onModeUpdate",     value: function onModeUpdate(mode) {       this._mode = mode;       this.updateMode();     }   }, {     key: "updateMode",     value: function updateMode() {       this._galleryComponent.onModeUpdate(this._mode);     }   }, {     key: "toggle",     value: function toggle() {       this._galleryRow.toggle();     }   }, {     key: "setGalleryImages",     value: function setGalleryImages(galleryImages) {       this._galleryComponent.setGalleryImages(galleryImages);     }   }]);    return GalleryRowComponent; }();  var GalleryComponent = /*#__PURE__*/ function () {   function GalleryComponent(container, onSelectImage) {     _classCallCheck(this, GalleryComponent);      this._galleryImages = null;     this._container = container;     this._imageComponents = [];     this._onSelectImage = onSelectImage;   }    _createClass(GalleryComponent, [{     key: "onModeUpdate",     value: function onModeUpdate(mode) {       this._mode = mode;       this.updateMode();     }   }, {     key: "updateMode",     value: function updateMode() {       var _this9 = this;        this._imageComponents.forEach(function (imageComponent) {         imageComponent.onModeUpdate(_this9._mode);       });     }   }, {     key: "setGalleryImages",     value: function setGalleryImages(galleryImages) {       this._galleryImages = galleryImages;       this.render();     }   }, {     key: "render",     value: function render() {       if (!this._container) {         return;       }        this._container.empty();        this._renderGallery();     }   }, {     key: "_renderGallery",     value: function _renderGallery() {       if (!this._galleryImages) {         this._container.text('загрузка...');       } else {         if (this._galleryImages.hasWlmImages()) {           this._container.append(this._renderGallerySection('Фотографии Wiki Loves Monuments', this._galleryImages.getWlmImages()));         }          if (this._galleryImages.hasCommonsImages()) {           this._container.append(this._renderGallerySection('Фотографии из категории Commons', this._galleryImages.getCommonsImages()));         }       }     }   }, {     key: "_renderGallerySection",     value: function _renderGallerySection(title, images) {       var _this10 = this;        var headerDiv = $('<div style="width: 100%; text-align: center; font-weight: bold;">').text(title);       var imagesDiv = $('<div style="display: flex; flex-direction: row; flex-wrap: wrap; align-items: center">');       images.forEach(function (image) {         var imageComponent = new GalleryImageComponent(imagesDiv, image, _this10._onSelectImage, _this10._mode);         imageComponent.render();          _this10._imageComponents.push(imageComponent);       });       return $('<div>').append(headerDiv).append(imagesDiv);     }   }]);    return GalleryComponent; }();  var GalleryImageComponent = /*#__PURE__*/ function () {   function GalleryImageComponent(container, image, onSelect, mode) {     _classCallCheck(this, GalleryImageComponent);      this._container = container;     this._image = image;     this._onSelect = onSelect;     this.mode = mode;   }    _createClass(GalleryImageComponent, [{     key: "onModeUpdate",     value: function onModeUpdate(mode) {       this.mode = mode;       this.updateMode();     }   }, {     key: "updateMode",     value: function updateMode() {       if (this.mode === MODES.EDIT) {         this._selectLink.show();       } else {         this._selectLink.hide();       }     }   }, {     key: "render",     value: function render() {       var _this11 = this;        var imageElement = $('<img>').attr('src', this._image.thumb);       var commonsUrl = 'https://commons.wikimedia.org/wiki/' + this._image.image;       var fullSizeUrl = this._image.url;       var imageLink = $('<a>').attr('href', fullSizeUrl).attr('target', '_blank').append(imageElement);       var viewCommonsLink = $('<a>').text('[Смотрeть на Commons]').attr('href', commonsUrl).attr('target', '_blank');       var viewFullLink = $('<a>').text('[Смотреть в полном размере]').attr('href', fullSizeUrl).attr('target', '_blank');       this._selectLink = $('<a style="display: none;">').text('[Выбрать]').click(function () {         return _this11._onSelect(_this11._image.image.replace(/^File:/, '').replace(' ', '_'));       });        this._container.append($('<div style="padding: 10px; display: flex; flex-direction: column; justify-content: center">').append($('<div>').append(imageLink)).append($('<div style="text-align: center">').append(viewCommonsLink)).append($('<div style="text-align: center">').append(viewFullLink)).append($('<div style="text-align: center">').append(this._selectLink)));        this.updateMode();     }   }]);    return GalleryImageComponent; }();  var MODES = {   VIEW: 'view',   EDIT: 'edit' };  /***/ }), /* 8 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CulturalMonumentType", function() { return CulturalMonumentType; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "culturalMonumentTypes", function() { return culturalMonumentTypes; }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }  var CulturalMonumentType = /*#__PURE__*/ function () {   function CulturalMonumentType(value, title) {     _classCallCheck(this, CulturalMonumentType);      this._value = value;     this._title = title;   }    _createClass(CulturalMonumentType, [{     key: "getValue",     value: function getValue() {       return this._value;     }   }, {     key: "getTitle",     value: function getTitle() {       return this._title;     }   }]);    return CulturalMonumentType; }(); var culturalMonumentTypes = [new CulturalMonumentType('', ''), new CulturalMonumentType('architecture', 'памятник архитектуры'), new CulturalMonumentType('history', 'памятник истории'), new CulturalMonumentType('monument', 'памятник монументального искусства'), new CulturalMonumentType('archeology', 'памятник археологии')];  /***/ }), /* 9 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CulturalMonumentStyle", function() { return CulturalMonumentStyle; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "culturalMonumentStyles", function() { return culturalMonumentStyles; }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }  var CulturalMonumentStyle = /*#__PURE__*/ function () {   function CulturalMonumentStyle(value, title) {     _classCallCheck(this, CulturalMonumentStyle);      this._value = value;     this._title = title;   }    _createClass(CulturalMonumentStyle, [{     key: "getTitle",     value: function getTitle() {       return this._title;     }   }, {     key: "getValue",     value: function getValue() {       return this._value;     }   }]);    return CulturalMonumentStyle; }(); var culturalMonumentStyles = [new CulturalMonumentStyle('', ''), new CulturalMonumentStyle('конструктивизм', 'конструктивизм'), new CulturalMonumentStyle('модерн', 'модерн')];  /***/ }), /* 10 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CulturalMonumentProtection", function() { return CulturalMonumentProtection; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "culturalMonumentProtections", function() { return culturalMonumentProtections; }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }  var CulturalMonumentProtection = /*#__PURE__*/ function () {   function CulturalMonumentProtection(value, title) {     _classCallCheck(this, CulturalMonumentProtection);      this._value = value;     this._title = title;   }    _createClass(CulturalMonumentProtection, [{     key: "getTitle",     value: function getTitle() {       return this._title;     }   }, {     key: "getValue",     value: function getValue() {       return this._value;     }   }]);    return CulturalMonumentProtection; }(); var culturalMonumentProtections = [new CulturalMonumentProtection('', ''), new CulturalMonumentProtection('Ф', 'федеральная'), new CulturalMonumentProtection('Р', 'региональная'), new CulturalMonumentProtection('М', 'местная'), new CulturalMonumentProtection('В', 'выявленный объект')];  /***/ }), /* 11 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Region", function() { return Region; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "regions", function() { return regions; }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }  var Region = /*#__PURE__*/ function () {   function Region(id, title) {     _classCallCheck(this, Region);      this._id = id;     this._title = title;   }    _createClass(Region, [{     key: "getId",     value: function getId() {       return this._id;     }   }, {     key: "getTitle",     value: function getTitle() {       return this._title;     }   }]);    return Region; }(); var regions = [new Region("", "не задан"), new Region("ru-ad", "Адыгея"), new Region("ru-ba", "Башкортостан"), new Region("ru-bu", "Бурятия"), new Region("ru-al", "Алтай"), new Region("ru-da", "Дагестан"), new Region("ru-in", "Ингушетия"), new Region("ru-kb", "Кабардино-Балкария"), new Region("ru-kl", "Калмыкия"), new Region("ru-kc", "Карачаево-Черкесия"), new Region("ru-krl", "Карелия"), new Region("ru-ko", "республика Коми"), new Region("ru-me", "Марий Эл"), new Region("ru-mo", "Мордовия"), new Region("ru-sa", "Якутия (Саха)"), new Region("ru-se", "Северная Осетия"), new Region("ru-ta", "Татарстан"), new Region("ru-ty", "Тува"), new Region("ru-ud", "Удмуртия"), new Region("ru-kk", "Хакасия"), new Region("ru-ce", "Чеченская республика"), new Region("ru-chv", "Чувашия"), new Region("ru-alt", "Алтайский край"), new Region("ru-kda", "Краснодарский край"), new Region("ru-kya", "Красноярский край"), new Region("ru-pri", "Приморский край"), new Region("ru-sta", "Ставропольский край"), new Region("ru-kha", "Хабаровский край"), new Region("ru-amu", "Амурская область"), new Region("ru-ark", "Архангельская область"), new Region("ru-ast", "Астраханская область"), new Region("ru-bel", "Белгородская область"), new Region("ru-bry", "Брянская область"), new Region("ru-vla", "Владимирская область"), new Region("ru-vgg", "Волгоградская область"), new Region("ru-vol", "Вологодская область"), new Region("ru-vor", "Воронежская область"), new Region("ru-iva", "Ивановская область"), new Region("ru-irk", "Иркутская область"), new Region("ru-kal", "Калининградская область"), new Region("ru-klu", "Калужская область"), new Region("ru-kam", "Камчатский край"), new Region("ru-kem", "Кемеровская область"), new Region("ru-kir", "Кировская область"), new Region("ru-kos", "Костромская область"), new Region("ru-kgn", "Курганская область"), new Region("ru-krs", "Курская область"), new Region("ru-len", "Ленинградская область"), new Region("ru-lip", "Липецкая область"), new Region("ru-mag", "Магаданская область"), new Region("ru-mos", "Московская область"), new Region("ru-mur", "Мурманская область"), new Region("ru-niz", "Нижегородская область"), new Region("ru-ngr", "Новгородская область"), new Region("ru-nvs", "Новосибирская область"), new Region("ru-oms", "Омская область"), new Region("ru-ore", "Оренбургская область"), new Region("ru-orl", "Орловская область"), new Region("ru-pnz", "Пензенская область"), new Region("ru-per", "Пермский край"), new Region("ru-psk", "Псковская область"), new Region("ru-ros", "Ростовская область"), new Region("ru-rya", "Рязанская область"), new Region("ru-sam", "Самарская область"), new Region("ru-sar", "Саратовская область"), new Region("ru-sak", "Сахалинская область"), new Region("ru-sve", "Свердловская область"), new Region("ru-smo", "Смоленская область"), new Region("ru-tam", "Тамбовская область"), new Region("ru-tve", "Тверская область"), new Region("ru-tom", "Томская область"), new Region("ru-tul", "Тульская область"), new Region("ru-tyu", "Тюменская область"), new Region("ru-uly", "Ульяновская область"), new Region("ru-che", "Челябинская область"), new Region("ru-zab", "Забайкальский край"), new Region("ru-yar", "Ярославская область"), new Region("ru-mow", "Москва"), new Region("ru-spb", "Санкт-Петербург"), new Region("ru-jew", "Еврейская автономная область"), new Region("ru-km", "Крым"), new Region("ru-nen", "Ненецкий автономный округ"), new Region("ru-khm", "Ханты-Мансийский автономный округ"), new Region("ru-chu", "Чукотский автономный округ"), new Region("ru-yam", "Ямало-Ненецкий автономный округ"), new Region("ru-sev", "Севастополь")];  /***/ }), /* 12 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ValidationUtils", function() { return ValidationUtils; }); var ValidationUtils = {   normalizeUrl: function normalizeUrl(url) {     var webRegex = new RegExp('^https?://', 'i');      if (!webRegex.test(url) && url !== '') {       return 'http://' + url;     } else {       return url;     }   } };  /***/ }), /* 13 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ListingItemIcons", function() { return ListingItemIcons; }); var ListingItemIcons = {   THUMBS_URL: 'https://upload.wikimedia.org/wikipedia/commons/thumb/',   createComplexMainElementIcon: function createComplexMainElementIcon() {     return $('<img>').attr({       'src': ListingItemIcons.THUMBS_URL + '8/8c/Location_dot_darkslategray.svg/10px-Location_dot_darkslategray.svg.png',       'alt': 'главный элемент комплекса',       'width': '10px',       'height': '10px'     });   },   createMunidIcon: function createMunidIcon() {     return $('<img>').attr({       'src': ListingItemIcons.THUMBS_URL + 'f/ff/Wikidata-logo.svg/18px-Wikidata-logo.svg.png',       'alt': 'район на Викиданных',       'width': '18px',       'height': '10px'     });   },   createMapIcon: function createMapIcon() {     return $('<img>').attr({       'src': ListingItemIcons.THUMBS_URL + 'c/ce/Map_mag.png/17px-Map_mag.png',       'alt': 'Расположение на карте',       'width': '17px',       'height': '17px'     });   },   createWikipediaIcon: function createWikipediaIcon() {     return $('<img>').attr({       'src': ListingItemIcons.THUMBS_URL + '8/80/Wikipedia-logo-v2.svg/19px-Wikipedia-logo-v2.svg.png',       'alt': 'Расположение на карте',       'width': '19px',       'height': '17px'     });   },   createCommonsIcon: function createCommonsIcon() {     return $('<img>').attr({       'src': ListingItemIcons.THUMBS_URL + '4/4a/Commons-logo.svg/17px-Commons-logo.svg.png',       'alt': 'Расположение на карте',       'width': '17px',       'height': '23px'     });   },   createWikidataIcon: function createWikidataIcon() {     return $('<img>').attr({       'src': ListingItemIcons.THUMBS_URL + 'f/ff/Wikidata-logo.svg/24px-Wikidata-logo.svg.png',       'alt': 'Расположение на карте',       'width': '24px',       'height': '13px'     });   },   MonumentType: {     createArchitectureIcon: function createArchitectureIcon() {       return $('<img>').attr({         'src': ListingItemIcons.THUMBS_URL + 'c/cc/PorticoIcon.svg/20px-PorticoIcon.svg.png',         'alt': 'памятник архитектуры',         'width': '20px',         'height': '20px'       });     },     createHistoryIcon: function createHistoryIcon() {       return $('<img>').attr({         'src': ListingItemIcons.THUMBS_URL + 'c/c8/HistoryIcon.svg/18px-HistoryIcon.svg.png',         'alt': 'памятник истории',         'width': '18px',         'height': '18px'       });     },     createArcheologyIcon: function createArcheologyIcon() {       return $('<img>').attr({         'src': ListingItemIcons.THUMBS_URL + 'c/ce/ArcheologyIcon.svg/22px-ArcheologyIcon.svg.png',         'alt': 'памятник археологии',         'width': '22px',         'height': '22px'       });     },     createMonumentIcon: function createMonumentIcon() {       return $('<img>').attr({         'src': ListingItemIcons.THUMBS_URL + 'c/c2/MonumentIcon.svg/20px-MonumentIcon.svg.png',         'alt': 'памятник монументального искусства',         'width': '20px',         'height': '20px'       });     }   } };  /***/ }), /* 14 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ListingItemFormComposer", function() { return ListingItemFormComposer; }); /* harmony import */ var _input_insert_symbols__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(15);  var ListingItemFormComposer = {   createTextInput: function createTextInput(size) {     var input = $('<input>').attr({       'type': 'text',       'style': 'font-size: 97%; border: 1px solid grey;'     });      if (size) {       input.attr('size', size);     }      return input;   },   createTextInputLarge: function createTextInputLarge() {     return $('<input>').attr({       'type': 'text',       'style': 'font-size: 97%; border: 1px solid grey; width: 600px;'     });   },   createTextInputSmall: function createTextInputSmall() {     return $('<input>').attr({       'type': 'text',       'style': 'font-size: 97%; border: 1px solid grey; width: 100px;'     });   },   createTextarea: function createTextarea() {     return $('<textarea>').attr({       'type': 'text',       'style': 'font-size: 97%; border: 1px solid grey; width: 600px;',       'rows': '3'     });   },   createCheckboxInput: function createCheckboxInput() {     return $('<input>').attr({       'type': 'checkbox',       'style': 'border: 1px solid grey;'     });   },   createSelector: function createSelector(options) {     var inputElement = $('<select>').attr({       'style': 'font-size: 97%; border: 1px solid grey; width: 200px;'     });     options.forEach(function (option) {       var optionElement = $('<option>', {         'value': option.value,         'html': option.title       });       inputElement.append(optionElement);     });     return inputElement;   },   createFormRow: function createFormRow(rowTitle) {     return $('<div>').attr('style', 'display: flex; flex-wrap: wrap;').append($('<div>').attr('style', 'font-weight: bold; padding-top: 5px;').text(rowTitle));   },   createFormElement: function createFormElement(title, input) {     var formElement = $('<div>').attr('style', 'padding-left: 5px; display: flex; padding-top: 5px;');      if (title) {       formElement.append($('<div>').attr('style', 'padding-left: 5px;').text(title));     }      formElement.append($('<div>').attr('style', 'padding-left: 5px;').append(input));     return formElement;   },   createInsertSymbols: function createInsertSymbols(input) {     var buttonInsertQuotes = $('<a>', {       'class': 'name-quotes-template',       href: 'javascript:;',       html: '«»'     });     var buttonInsertDash = $('<a>', {       'class': 'name-dash-template',       href: 'javascript:;',       html: '—'     });     _input_insert_symbols__WEBPACK_IMPORTED_MODULE_0__["InputInsertSymbols"].addDashInsertHandler(buttonInsertDash, input);     _input_insert_symbols__WEBPACK_IMPORTED_MODULE_0__["InputInsertSymbols"].addQuotesInsertHandler(buttonInsertQuotes, input);     return $('<span>').append('&nbsp;').append(buttonInsertQuotes).append('&nbsp;').append(buttonInsertDash);   } };  /***/ }), /* 15 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InputInsertSymbols", function() { return InputInsertSymbols; }); var InputInsertSymbols = {   addQuotesInsertHandler: function addQuotesInsertHandler(insertButton, insertToInput) {     insertButton.click(function () {       var selectionStart = insertToInput[0].selectionStart;       var selectionEnd = insertToInput[0].selectionEnd;       var oldValue = insertToInput.val();       var newValue = oldValue.substring(0, selectionStart) + "«" + oldValue.substring(selectionStart, selectionEnd) + "»" + oldValue.substring(selectionEnd);       insertToInput.val(newValue);        InputInsertSymbols._selectRange(insertToInput[0], selectionStart + 1, selectionEnd + 1);     });   },   addDashInsertHandler: function addDashInsertHandler(insertButton, insertToInput) {     insertButton.click(function () {       var caretPos = insertToInput[0].selectionStart;       var oldValue = insertToInput.val();       var newValue = oldValue.substring(0, caretPos) + "—" + oldValue.substring(caretPos);       insertToInput.val(newValue);        InputInsertSymbols._selectRange(insertToInput[0], caretPos + 1);     });   },   _selectRange: function _selectRange(element, start, end) {     if (end === undefined) {       end = start;     }      element.focus();      if ('selectionStart' in element) {       element.selectionStart = start;       element.selectionEnd = end;     } else if (element.setSelectionRange) {       element.setSelectionRange(start, end);     } else if (element.createTextRange) {       var range = element.createTextRange();       range.collapse(true);       range.moveEnd('character', end);       range.moveStart('character', start);       range.select();     }   } };  /***/ }), /* 16 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SearchBar", function() { return SearchBar; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SearchConstants", function() { return SearchConstants; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SortConstants", function() { return SortConstants; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SearchFilter", function() { return SearchFilter; }); /* harmony import */ var _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(14); /* harmony import */ var _cultural_monument_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8); /* harmony import */ var _cultural_monument_styles__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9); /* harmony import */ var _cultural_monument_protections__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(10); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }      var SearchBar = /*#__PURE__*/ function () {   function SearchBar(onUpdate, onUpdateItemsOnPage, onUpdateView, onUpdateSort) {     _classCallCheck(this, SearchBar);      this._onUpdate = onUpdate;     this._onUpdateItemsOnPage = onUpdateItemsOnPage;     this._onUpdateView = onUpdateView;     this._onUpdateSort = onUpdateSort;      this._initComponents();   }    _createClass(SearchBar, [{     key: "render",     value: function render() {       return this._searchBar;     }   }, {     key: "_initComponents",     value: function _initComponents() {       var _this = this;        this._searchBar = $('<div style="padding: 10px; background-color: #f8f9fa; border: 1px solid #a2a9b1;">');       this._inputSort = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_0__["ListingItemFormComposer"].createSelector([{         title: 'По-умолчанию',         value: SortConstants.DEFAULT       }, {         title: 'По названию',         value: SortConstants.NAME       }, {         title: 'По адресу',         value: SortConstants.ADDRESS       }, {         title: 'По типу',         value: SortConstants.TYPE       }]);       this._inputItemsOnPage = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_0__["ListingItemFormComposer"].createSelector([{         title: '10',         value: 10       }, {         title: '50',         value: 50       }, {         title: '100',         value: 100       }, {         title: '250',         value: 250       }, {         title: '500',         value: 500       }, {         title: 'все',         value: 0       }]).css('width', '50px');       this._inputView = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_0__["ListingItemFormComposer"].createSelector([{         title: 'полный',         value: SearchConstants.VIEW_FULL       }, {         title: 'компактный',         value: SearchConstants.VIEW_COMPACT       }]).css('width', '120px');       this._inputSearchDescription = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_0__["ListingItemFormComposer"].createTextInput();       this._inputSearchAddress = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_0__["ListingItemFormComposer"].createTextInput();       this._inputImage = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_0__["ListingItemFormComposer"].createSelector([{         title: '',         value: SearchConstants.PHOTO_ANY       }, {         title: 'Отсутствует',         value: SearchConstants.PHOTO_NO       }, {         title: 'Присутствует',         value: SearchConstants.PHOTO_YES       }]);       this._inputCoordinates = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_0__["ListingItemFormComposer"].createSelector([{         title: '',         value: SearchConstants.COORDINATES_ANY       }, {         title: 'Заданы, точные',         value: SearchConstants.COORDINATES_PRECISE       }, {         title: 'Заданы, неточные',         value: SearchConstants.COORDINATES_NOT_PRECISE       }, {         title: 'Заданы, любые',         value: SearchConstants.COORDINATES_EXISTS       }, {         title: 'Не заданы',         value: SearchConstants.COORDINATES_NO       }]);       var filterStyleVals = _cultural_monument_styles__WEBPACK_IMPORTED_MODULE_2__["culturalMonumentStyles"].map(function (culturalMonumentStyle) {         return {           title: culturalMonumentStyle.getTitle(),           value: culturalMonumentStyle.getValue()         };       });       this._inputStyle = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_0__["ListingItemFormComposer"].createSelector(filterStyleVals);       var filterTypeVals = _cultural_monument_types__WEBPACK_IMPORTED_MODULE_1__["culturalMonumentTypes"].map(function (culturalMonumentType) {         return {           title: culturalMonumentType.getTitle(),           value: culturalMonumentType.getValue()         };       });       this._inputType = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_0__["ListingItemFormComposer"].createSelector(filterTypeVals);       var filterProtectionVals = _cultural_monument_protections__WEBPACK_IMPORTED_MODULE_3__["culturalMonumentProtections"].map(function (culturalMonumentProtection) {         return {           title: culturalMonumentProtection.getTitle(),           value: culturalMonumentProtection.getValue()         };       });       this._inputProtection = _listing_item_form_composer__WEBPACK_IMPORTED_MODULE_0__["ListingItemFormComposer"].createSelector(filterProtectionVals);       this._hideLink = $('<a href="javascript:;" style="display: none;">').text('[Скрыть]');       this._showLink = $('<a href="javascript:;">').text('[Показать]');        this._searchBar.append($('<div style="display: flex; justify-content: space-between;">').append($('<div>').append($('<b>').text('Фильтры')).append('&nbsp;').append(this._hideLink).append(this._showLink)).append($('<div style="display: flex;">').append($('<div>').append($('<b>').text('Упорядочить: ')).append(this._inputSort)).append($('<div style="padding-left: 10px;">').append($('<b>').text('Вид: ')).append(this._inputView)).append($('<div style="padding-left: 10px;">').append($('<b>').text('Элементов на странице: ')).append(this._inputItemsOnPage))));        this._filtersBar = $('<div style="display: none;">');        this._hideLink.click(function () {         _this._hideLink.hide();          _this._showLink.show();          _this._filtersBar.hide();       });        this._showLink.click(function () {         _this._showLink.hide();          _this._hideLink.show();          _this._filtersBar.show();       });        this._searchBar.append(this._filtersBar);        this._filtersBar.append($('<div style="padding: 5px;">').append('Название или описание: ').append(this._inputSearchDescription));        this._filtersBar.append($('<div style="padding: 5px;">').append('Адрес: ').append(this._inputSearchAddress));        this._filtersBar.append($('<div style="padding: 5px;">').append('Фотография: ').append(this._inputImage));        this._filtersBar.append($('<div style="padding: 5px;">').append('Координаты: ').append(this._inputCoordinates));        this._filtersBar.append($('<div style="padding: 5px;">').append('Стиль: ').append(this._inputStyle));        this._filtersBar.append($('<div style="padding: 5px;">').append('Тип: ').append(this._inputType));        this._filtersBar.append($('<div style="padding: 5px;">').append('Категория охраны: ').append(this._inputProtection));        this._inputSearchDescription.keyup(function () {         return _this._onUpdateSearch();       });        this._inputSearchAddress.keyup(function () {         return _this._onUpdateSearch();       });        this._inputImage.change(function () {         return _this._onUpdateSearch();       });        this._inputCoordinates.change(function () {         return _this._onUpdateSearch();       });        this._inputType.change(function () {         return _this._onUpdateSearch();       });        this._inputStyle.change(function () {         return _this._onUpdateSearch();       });        this._inputProtection.change(function () {         return _this._onUpdateSearch();       });        this._inputItemsOnPage.change(function () {         return _this._onUpdateItemsOnPage(parseInt(_this._inputItemsOnPage.val()));       });        this._inputView.change(function () {         return _this._onUpdateView(_this._inputView.val());       });        this._inputSort.change(function () {         return _this._onUpdateSort(_this._inputSort.val());       });     }   }, {     key: "_onUpdateSearch",     value: function _onUpdateSearch() {       this._onUpdate(this._getCurrentSearchFilter());     }   }, {     key: "_getCurrentSearchFilter",     value: function _getCurrentSearchFilter() {       return new SearchFilter(this._inputSearchDescription.val(), this._inputSearchAddress.val(), this._inputImage.val(), this._inputCoordinates.val(), this._inputType.val(), this._inputStyle.val(), this._inputProtection.val());     }   }]);    return SearchBar; }(); var SearchConstants = {   PHOTO_ANY: '',   PHOTO_YES: 'yes',   PHOTO_NO: 'no',   COORDINATES_ANY: '',   COORDINATES_EXISTS: 'exists',   COORDINATES_PRECISE: 'precise',   COORDINATES_NOT_PRECISE: 'not-precise',   COORDINATES_NO: 'no',   VIEW_FULL: 'full',   VIEW_COMPACT: 'compact' }; var SortConstants = {   DEFAULT: 'default',   NAME: 'name',   ADDRESS: 'address',   TYPE: 'type' }; var SearchFilter = /*#__PURE__*/ function () {   function SearchFilter(searchText, searchAddress, photo, coordinates, type, style, protection) {     _classCallCheck(this, SearchFilter);      this._searchDescription = searchText;     this._searchAddress = searchAddress;     this._photo = photo;     this._coordinates = coordinates;     this._type = type;     this._style = style;     this._protection = protection;   }    _createClass(SearchFilter, [{     key: "getSearchDescription",     value: function getSearchDescription() {       return this._searchDescription;     }   }, {     key: "getSearchAddress",     value: function getSearchAddress() {       return this._searchAddress;     }   }, {     key: "getPhoto",     value: function getPhoto() {       return this._photo;     }   }, {     key: "getCoordinates",     value: function getCoordinates() {       return this._coordinates;     }   }, {     key: "getType",     value: function getType() {       return this._type;     }   }, {     key: "getStyle",     value: function getStyle() {       return this._style;     }   }, {     key: "getProtection",     value: function getProtection() {       return this._protection;     }   }]);    return SearchFilter; }();  /***/ }), /* 17 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ChangesDescription", function() { return ChangesDescription; }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }  var ChangesDescription = /*#__PURE__*/ function () {   function ChangesDescription(description, isMinor) {     _classCallCheck(this, ChangesDescription);      this._description = description;     this._isMinor = isMinor;   }    _createClass(ChangesDescription, [{     key: "getDescription",     value: function getDescription() {       return this._description;     }   }, {     key: "getIsMinor",     value: function getIsMinor() {       return this._isMinor;     }   }]);    return ChangesDescription; }();  /***/ }), /* 18 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ArrayUtils", function() { return ArrayUtils; }); var ArrayUtils = {   hasElement: function hasElement(array, element) {     return array.indexOf(element) >= 0;   },   inArray: function inArray(element, array) {     return this.hasElement(array, element);   },   diff: function diff(array1, array2) {     var _this = this;      return array1.filter(function (item) {       return !_this.inArray(item, array2);     });   },   consistsOnlyOf: function consistsOnlyOf(array, items) {     var arrayUnique = this.unique(array);     var itemsUnique = this.unique(items);     arrayUnique.sort();     itemsUnique.sort();      for (var i = 0; i < arrayUnique.length; i++) {       if (!this.inArray(arrayUnique[i], itemsUnique[i])) {         return false;       }     }      return true;   },   unique: function unique(array) {     return array.filter(function (value, index) {       return array.indexOf(value) === index;     });   } };  /***/ }), /* 19 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsyncUtils", function() { return AsyncUtils; }); var AsyncUtils = {   runSequence: function runSequence(functions, onSuccess, results) {     if (!results) {       results = [];     }      if (functions.length > 0) {       var firstFunction = functions[0];       firstFunction(function (result) {         results.push(result);         setTimeout( // hack to break recursion chain         function () {           AsyncUtils.runSequence(functions.slice(1), onSuccess, results);         }, 0);       });     } else {       if (onSuccess) {         onSuccess(results);       }     }   },   runChunks: function runChunks(runSingleChunkFunction, maxChunkSize, data, onSuccess) {     var chunkRunFunctions = [];      var _loop = function _loop(dataNumStart) {       var dataChunk = data.slice(dataNumStart, dataNumStart + maxChunkSize);       chunkRunFunctions.push(function (onSuccess) {         return runSingleChunkFunction(dataChunk, onSuccess);       });     };      for (var dataNumStart = 0; dataNumStart < data.length; dataNumStart += maxChunkSize) {       _loop(dataNumStart);     }      this.runSequence(chunkRunFunctions, function (chunkResults) {       var result = chunkResults.reduce(function (current, total) {         return total.concat(current);       }, []);       onSuccess(result);     });   } };  /***/ }), /* 20 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WikivoyageApi", function() { return WikivoyageApi; }); var WikivoyageApi = {   baseUrl: 'https://ru.wikivoyage.org/w/api.php',   executeRequest: function executeRequest(parameters, onSuccess, onFailure) {     $.ajax({       url: this.baseUrl,       data: parameters,       crossDomain: true,       dataType: 'jsonp'     }).done(function (data) {       onSuccess(data);     }).fail(function () {       if (onFailure) {         onFailure();       }     });   },   getPage: function getPage(page, onSuccess) {     this.executeRequest({       'action': 'query',       'prop': 'revisions',       'rvprop': 'content',       'rvlimit': '1',       'titles': page,       'format': 'json'     }, function (data) {       if (!data || !data.query || !data.query.pages) {         return;       }        var pages = data.query.pages;       var firstPage = pages[Object.keys(pages)[0]];        if (!firstPage || !firstPage.revisions || firstPage.revisions.length <= 0) {         return;       }        onSuccess(firstPage.revisions[0]['*']);     });   },   getImageInfo: function getImageInfo(image, onSuccess, onFailure) {     var self = this;     self.executeRequest({       'action': 'query',       'titles': image,       'prop': 'imageinfo',       'iiprop': 'url',       'iiurlwidth': '200',       'iiurlheight': '200',       'format': 'json'     }, function (data) {       if (!data.query || !data.query.pages) {         if (onFailure) {           onFailure();         }          return;       }        var pages = data.query.pages;       var firstPage = pages[Object.keys(pages)[0]];        if (!firstPage || !firstPage.imageinfo || firstPage.imageinfo.length <= 0) {         if (onFailure) {           onFailure();         }          return;       }        var imageInfo = firstPage.imageinfo[0];       onSuccess({         'image': image,         'thumb': imageInfo.thumburl,         'url': imageInfo.url       });     }, function () {       if (onFailure) {         onFailure();       }     });   } };  /***/ }), /* 21 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CulturalEditorListingSerializer", function() { return CulturalEditorListingSerializer; }); /* harmony import */ var _listing_serializer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22);  var CulturalEditorListingSerializer = {   serializeListingData: function serializeListingData(listingData) {     var serializer = new _listing_serializer__WEBPACK_IMPORTED_MODULE_0__["ListingSerializer"]('monument', listingData);     serializer.writeListingStart();     serializer.writeParametersLine(['type', 'status']);     serializer.writeParametersLine(['lat', 'long', 'precise']);     serializer.writeParameterLine('name');     serializer.writeParametersLine(['knid', 'complex'], ['complex']);     serializer.writeParameterLine('knid-new');     serializer.writeParametersLine(['region', 'district']);     serializer.writeParametersLine(['municipality', 'munid']);     serializer.writeParameterLine('block', true);     serializer.writeParameterLine('address');     serializer.writeParametersLine(['year', 'author']);     serializer.writeParameterLine('style', true);     serializer.writeParameterLine('description');     serializer.writeParameterLine('image');     serializer.writeParameterLine('wdid');     serializer.writeParameterLine('wiki');     serializer.writeParametersLine(['commonscat', 'protection'], ['protection']);     serializer.writeParameterLine('link');     serializer.writeParameterLine('linkextra', true);     serializer.writeParameterLine('document', true);     serializer.writeParameterLine('doc', true);     serializer.writeParameterLine('style', true);     serializer.writeParameterLine('protection', true);     serializer.writeParameterLine('dismissed', true);     serializer.writeOtherNonEmptyParameters();     serializer.writeListingEnd();     return serializer.getSerializedListing();   } };  /***/ }), /* 22 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ListingSerializer", function() { return ListingSerializer; }); /* harmony import */ var _array_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18); /* harmony import */ var _string_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }    var ListingSerializer = /*#__PURE__*/ function () {   function ListingSerializer(listingType, listingData) {     _classCallCheck(this, ListingSerializer);      this._listingType = listingType;     this._listingData = listingData;     this._serializedListing = '';     this._serializedParameters = [];   }    _createClass(ListingSerializer, [{     key: "writeListingStart",     value: function writeListingStart(addNewline) {       this._serializedListing += '{{' + this._listingType;        if (addNewline) {         this._serializedListing += '\n';       } else {         this._serializedListing += ' ';       }     }   }, {     key: "writeParameterLine",     value: function writeParameterLine(parameterName, isOptional) {       var parameterValue = this._getParameterValue(parameterName);        if (isOptional && parameterValue === '') {         return;       }        this._serializedListing += ListingSerializer._parameterString(parameterName, parameterValue, true);        this._serializedParameters.push(parameterName);     }   }, {     key: "writeParametersLine",     value: function writeParametersLine(parameterNames, optionalParameters) {       var _this = this;        var isFirst = true;       parameterNames.forEach(function (parameterName) {         var parameterValue = _this._getParameterValue(parameterName);          var isOptional = optionalParameters && _array_utils__WEBPACK_IMPORTED_MODULE_0__["ArrayUtils"].inArray(parameterName, optionalParameters);          if (isOptional && parameterValue === '') {           return;         }          if (!isFirst) {           _this._serializedListing += ' ';         }          _this._serializedListing += ListingSerializer._parameterString(parameterName, parameterValue, false);          _this._serializedParameters.push(parameterName);          isFirst = false;       });        if (!isFirst) {         this._serializedListing += '\n';       }     }   }, {     key: "writeOtherNonEmptyParameters",     value: function writeOtherNonEmptyParameters() {       var _this2 = this;        var allParameterNames = Object.keys(this._listingData);       var otherParameterNames = _array_utils__WEBPACK_IMPORTED_MODULE_0__["ArrayUtils"].diff(allParameterNames, this._serializedParameters);       otherParameterNames.forEach(function (parameterName) {         var parameterValue = _this2._getParameterValue(parameterName);          if (parameterValue !== '') {           _this2._serializedListing += ListingSerializer._parameterString(parameterName, parameterValue, true);         }       });     }   }, {     key: "writeListingEnd",     value: function writeListingEnd() {       this._serializedListing += '}}';     }   }, {     key: "getSerializedListing",     value: function getSerializedListing() {       return this._serializedListing;     }   }, {     key: "_getParameterValue",     value: function _getParameterValue(parameterName) {       return _string_utils__WEBPACK_IMPORTED_MODULE_1__["StringUtils"].emptyToString(this._listingData[parameterName]);     }   }], [{     key: "_parameterString",     value: function _parameterString(parameterName, parameterValue, addNewline) {       var result = '|' + parameterName + '= ' + parameterValue;        if (addNewline) {         result += '\n';       }        return result;     }   }]);    return ListingSerializer; }();  /***/ }), /* 23 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MediaWikiPageWikitext", function() { return MediaWikiPageWikitext; }); /* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(24);  var api = new mw.Api(); var MediaWikiPageWikitext = {   loadSectionWikitext: function loadSectionWikitext(sectionIndex, onSuccess) {     $.ajax({       url: mw.util.wikiScript(''),       data: {         title: mw.config.get('wgPageName'),         action: 'raw',         section: sectionIndex       },       cache: false     }).done(function (data) {       onSuccess(data);     }).fail(function (jqXHR, textStatus, errorThrown) {       alert('Ошибка при получении исходного вики-текста статьи: ' + textStatus + ' ' + errorThrown);     });   },   saveSectionWikitext: function saveSectionWikitext(sectionIndex, sectionWikitext, changesSummary, changesIsMinor, captchaId, captchaAnswer, onSuccess, onFailure, onCaptcha, pageName) {     if (!pageName) {       pageName = mw.config.get("wgPageName");     }      var editPayload = {       action: "edit",       title: pageName,       text: sectionWikitext,       summary: changesSummary,       captchaid: captchaId,       captchaword: captchaAnswer     };      if (sectionIndex !== null) {       $.extend(editPayload, {         section: sectionIndex       });     }      if (changesIsMinor) {       $.extend(editPayload, {         minor: 'true'       });     }      api.postWithToken("csrf", editPayload).done(function (data) {       if (data && data.edit && data.edit.result === 'Success') {         onSuccess();       } else if (data && data.error) {         onFailure(_messages__WEBPACK_IMPORTED_MODULE_0__["commonMessages"].submitApiError + ' "' + data.error.code + '": ' + data.error.info);       } else if (data && data.edit.spamblacklist) {         onFailure(_messages__WEBPACK_IMPORTED_MODULE_0__["commonMessages"].submitBlacklistError + ': ' + data.edit.spamblacklist);       } else if (data && data.edit.captcha) {         onCaptcha(data.edit.captcha.url, data.edit.captcha.id);       } else {         onFailure(_messages__WEBPACK_IMPORTED_MODULE_0__["commonMessages"].submitUnknownError);       }     }).fail(function (code, result) {       if (code === "http") {         onFailure(_messages__WEBPACK_IMPORTED_MODULE_0__["commonMessages"].submitHttpError + ': ' + result.textStatus);       } else if (code === "ok-but-empty") {         onFailure(_messages__WEBPACK_IMPORTED_MODULE_0__["commonMessages"].submitEmptyError);       } else {         onFailure(_messages__WEBPACK_IMPORTED_MODULE_0__["commonMessages"].submitUnknownError + ': ' + code);       }     });   },   getSectionName: function getSectionName(sectionWikitext) {     var HEADING_REGEX = /^=+\s*([^=]+)\s*=+\s*\n/;     var result = HEADING_REGEX.exec(sectionWikitext);     return result !== null ? result[1].trim() : "";   } };  /***/ }), /* 24 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "commonMessages", function() { return commonMessages; }); var commonMessages = {   addTitle: 'Добавить объект',   editTitle: 'Редактировать объект',   submitApiError: 'Во время сохранения листинга на сервере произошла ошибка, пожайлуста, попробуйте сохранить ещё раз',   submitBlacklistError: 'Ошибка: текст содержит ссылку из чёрного списка, пожайлуста, удалите её и попробуйте сохранить снова',   submitUnknownError: 'Ошибка: при попытке сохранить листинг произошла неизвестная ошибка, пожайлуста, попробуйте сохранить ещё раз',   submitHttpError: 'Ошибка: сервер сообщил о HTTP ошибке, возникшей во время сохранения листинга, пожайлуста, попробуйте сохранить ещё раз',   submitEmptyError: 'Ошибка: сервер вернул пустой ответ при попытке сохранить листинг, пожайлуста, попробуйте сохранить ещё раз',   enterCaptcha: 'Введите CAPTCHA',   changesSummaryAdded: 'Добавлен объект',   changesSummaryUpdated: 'Обновлён объект',   captchaSubmit: 'Продолжить',   captchaCancel: 'Отмена' };  /***/ }), /* 25 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "downloadContent", function() { return downloadContent; }); // https://stackoverflow.com/questions/3665115/create-a-file-in-memory-for-user-to-download-not-through-server var downloadContent = function downloadContent(filename, text) {   var element = document.createElement('a');   element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));   element.setAttribute('download', filename);   element.style.display = 'none';   document.body.appendChild(element);   element.click();   document.body.removeChild(element); };  /***/ }), /* 26 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ExportPanel", function() { return ExportPanel; }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }  var ExportPanel = /*#__PURE__*/ function () {   function ExportPanel(onExportJson, onExportGpx) {     _classCallCheck(this, ExportPanel);      this._onExportJson = onExportJson;     this._onExportGpx = onExportGpx;   }    _createClass(ExportPanel, [{     key: "render",     value: function render() {       var _this = this;        var exportPanel = $('<div style="float: right;">');       var exportJsonLink = $("<a>").text('[JSON]');       exportPanel.append(exportJsonLink);       exportJsonLink.click(function () {         return _this._onExportJson();       });       exportPanel.append('&nbsp;');       var exportGpxLink = $("<a>").text('[GPX]');       exportPanel.append(exportGpxLink);       exportGpxLink.click(function () {         return _this._onExportGpx();       });       return exportPanel;     }   }]);    return ExportPanel; }();  /***/ }), /* 27 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CommonsApi", function() { return CommonsApi; }); /* harmony import */ var _async_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(19);  var CommonsApi = {   baseUrl: 'https://commons.wikimedia.org/w/api.php',   executeRequest: function executeRequest(parameters, onSuccess) {     $.ajax({       url: this.baseUrl,       data: parameters,       crossDomain: true,       dataType: 'jsonp'     }).done(function (data) {       onSuccess(data);     });   },   getCategoryFiles: function getCategoryFiles(category, limit, onSuccess) {     var self = this;     self.executeRequest({       'action': 'query',       'list': 'categorymembers',       'cmtype': 'file',       'cmtitle': 'Category:' + category,       'cmlimit': 'max',       'format': 'json'     }, function (data) {       if (data.query && data.query.categorymembers) {         var files = [];         data.query.categorymembers.forEach(function (member) {           if (member.title) {             files.push(member.title);           }         });         onSuccess(files);       }     });   },   getCategoryImages: function getCategoryImages(category, limit, onSucess) {     this.getCategoryFiles(category, limit, function (files) {       var images = [];       files.forEach(function (file) {         var extension = file.toLowerCase().substr(file.length - 4);          if (extension === '.jpg' || extension === '.png' || extension === '.gif') {           images.push(file);         }       });       onSucess(images);     });   },   getImageInfo: function getImageInfo(image, onSuccess) {     var self = this;     self.executeRequest({       'action': 'query',       'titles': image,       'prop': 'imageinfo|revisions',       'iiprop': 'url',       'iiurlwidth': '200',       'iiurlheight': '200',       'rvprop': 'content',       'rvlimit': '1',       'format': 'json'     }, function (data) {       if (!data.query || !data.query.pages) {         return;       }        var pages = data.query.pages;       var firstPage = pages[Object.keys(pages)[0]];        if (!firstPage || !firstPage.imageinfo || firstPage.imageinfo.length <= 0) {         return;       }        var text = '';        if (firstPage.revisions && firstPage.revisions.length > 0) {         var revision = firstPage.revisions[0];          if (revision['*']) {           text = revision['*'];         }       }        var imageInfo = firstPage.imageinfo[0];       onSuccess({         'image': image,         'thumb': imageInfo.thumburl,         'text': text,         'url': imageInfo.url       });     });   },   getImagesInfo: function getImagesInfo(images, onSuccess) {     var self = this;     _async_utils__WEBPACK_IMPORTED_MODULE_0__["AsyncUtils"].runSequence(images.map(function (image) {       return function (onSuccess) {         self.getImageInfo(image, onSuccess);       };     }), function (imageInfos) {       onSuccess(imageInfos);     });   },    /**    *    * @param categories list of category titles, e.g. ['Novosibirsk', 'Tomsk', 'Culture_of_Novosibirsk']    * @param onSuccess function which accepts single argument - list which has category    * titles for each category which has at least one file, e.g.    * ['Novosibirsk': 'Culture_of_Novosibirsk']    */   hasCategoriesFiles: function hasCategoriesFiles(categories, onSuccess) {     var _this = this;      var maxChunkSize = 30;     _async_utils__WEBPACK_IMPORTED_MODULE_0__["AsyncUtils"].runChunks(function (categoriesChunk, onSuccess) {       _this.executeRequest({         action: 'query',         titles: categoriesChunk.join("|"),         prop: 'categoryinfo',         format: 'json'       }, function (data) {         var result = [];          if (!data || !data.query || !data.query.pages) {           return;         }          Object.keys(data.query.pages).forEach(function (key) {           var pageInfo = data.query.pages[key];            if (pageInfo.title && pageInfo.categoryinfo && pageInfo.categoryinfo.files && pageInfo.categoryinfo.files > 0) {             result.push(pageInfo.title);           }         });         onSuccess(result);       });     }, maxChunkSize, categories, onSuccess);   },    /**    *    * @param categories list of category titles, e.g. ['Novosibirsk', 'Tomsk', 'Culture_of_Novosibirsk']    * @param onSuccess function which accepts single argument -  list where each item has category    * title and files count, e.g. [    *   {category: 'Novosibirsk', files: 51},    *   {category: 'Tomsk', files: 42}    *   {category: 'Culture_of_Novosibirsk', files: 48}    * ]    */   countCategoriesFiles: function countCategoriesFiles(categories, onSuccess) {     var _this2 = this;      var maxChunkSize = 30;     _async_utils__WEBPACK_IMPORTED_MODULE_0__["AsyncUtils"].runChunks(function (categoriesChunk, onSuccess) {       _this2.executeRequest({         action: 'query',         titles: categoriesChunk.join("|"),         prop: 'categoryinfo',         format: 'json'       }, function (data) {         var result = [];          if (!data || !data.query || !data.query.pages) {           return;         }          Object.keys(data.query.pages).forEach(function (key) {           var pageInfo = data.query.pages[key];            if (pageInfo.title) {             var filesCount = pageInfo.categoryinfo && pageInfo.categoryinfo.files ? pageInfo.categoryinfo.files : 0;             result.push({               category: pageInfo.title,               files: filesCount             });           }         });         onSuccess(result);       });     }, maxChunkSize, categories, onSuccess);   } };  /***/ }), /* 28 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CommonsImagesLoader", function() { return CommonsImagesLoader; }); /* harmony import */ var _commons_api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27);  var CommonsImagesLoader = {   loadImagesFromWLMCategory: function loadImagesFromWLMCategory(knid, onSuccess) {     var _this = this;      if (!knid) {       onSuccess([]);     } else {       _commons_api__WEBPACK_IMPORTED_MODULE_0__["CommonsApi"].getCategoryImages('WLM/' + knid, 'max', function (images) {         return _this.loadImages(images, onSuccess);       });     }   },   loadImagesFromWLECategory: function loadImagesFromWLECategory(knid, onSuccess) {     var _this2 = this;      if (!knid) {       onSuccess([]);     } else {       _commons_api__WEBPACK_IMPORTED_MODULE_0__["CommonsApi"].getCategoryImages('Protected_areas_of_Russia/' + knid, 'max', function (images) {         return _this2.loadImages(images, onSuccess);       });     }   },   loadImagesFromCommonsCategory: function loadImagesFromCommonsCategory(commonsCat, onSuccess) {     var _this3 = this;      if (!commonsCat) {       onSuccess([]);     } else {       _commons_api__WEBPACK_IMPORTED_MODULE_0__["CommonsApi"].getCategoryImages(commonsCat, 'max', function (images) {         return _this3.loadImages(images, onSuccess);       });     }   },   loadImages: function loadImages(images, onSuccess) {     _commons_api__WEBPACK_IMPORTED_MODULE_0__["CommonsApi"].getImagesInfo(images, onSuccess);   } };  /***/ }), /* 29 */ /***/ (function(module, __webpack_exports__, __webpack_require__) {  "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CulturalGalleryImages", function() { return CulturalGalleryImages; }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }  var CulturalGalleryImages = /*#__PURE__*/ function () {   function CulturalGalleryImages(wlmImages, commonsImages) {     _classCallCheck(this, CulturalGalleryImages);      this._wlmImages = wlmImages;     this._commonsImages = commonsImages;   }    _createClass(CulturalGalleryImages, [{     key: "getWlmImages",     value: function getWlmImages() {       return this._wlmImages;     }   }, {     key: "hasWlmImages",     value: function hasWlmImages() {       return CulturalGalleryImages._hasImages(this.getWlmImages());     }   }, {     key: "getCommonsImages",     value: function getCommonsImages() {       return this._commonsImages;     }   }, {     key: "hasCommonsImages",     value: function hasCommonsImages() {       return CulturalGalleryImages._hasImages(this.getCommonsImages());     }   }], [{     key: "_hasImages",     value: function _hasImages(images) {       return images !== undefined && images !== null && images.length > 0;     }   }]);    return CulturalGalleryImages; }();  /***/ }) /******/ ]);