{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/javascript/packs/turn-slide-embed.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","document","addEventListener","pickerElm","getElementById","data","JSON","parse","innerHTML","stateFormater","state","priceFormater","price","parseInt","toLocaleString","currency","style","maximumFractionDigits","handleLoadError","err","console","error","fetch","getAttribute","headers","then","resp","json","areaData","elm","loadingElm","getElementsByClassName","dragContainer","imagesContainer","hudContainer","apartmentInfoContainer","infoContainer","infoContainerElms","filterResultsNumElm","filterBtnElm","filtersActiveElm","defaultSet","currentSet","selectedImage","dragTools","activeFilters","imageSets","selectedApartment","length","div","createElement","textContent","classList","add","setAttribute","gotoImageSet","appendChild","push","imagesContainerBox","getBoundingClientRect","w_ratio","Math","round","width","h_ratio","height","resizeFunction","fn","e","buildLinks","selectImage","remove","delay","timeoutID","clearTimeout","args","arguments","that","this","setTimeout","apply","updateRoomsFilter","target","drawFilteredList","filterObjects","updatePriceFilter","updateStateFilter","toggleFilterPanel","filterCont","contains","toggle","closeApartmentInfoPane","criterias","filteredList","objectsToFilter","entries","filtersActive","filter","entry","objData","Number","setFilteredObjectsClass","listOfRows","fragment","DocumentFragment","tr","columns","j","td","openApartmentInfoPane","replaceChildren","querySelector","display","addApartmentSelectionClass","svg","createElementNS","areas","poly","coords","reduce","str","coord","identifier","clickAreaInImage","hoverAreaInImage","leaveHoverAreaInImage","visibility","deSelectApartment","apartmentInfo","href","alt","titleContainer","f","imageIndex","hidden","log","newSet","changeToImageSet","oldSetKey","newSetKey","set","loadImagesForSet","setKey","loadImageSet","list_of_loaded_elements","addImageSetToPage","container","imageElms","setContainer","forEach","dragStart","clientX","touches","clientY","offsetWidth","mouse_move_detector","dragEnd","removeEventListener","pageX","deltaX","movePics","newPos","newElm","oldElm","newLinkElm","oldLinkElm","images","Array","isArray","Promise","all","map","image_reference","resolve","reject","el","Image","onload","onerror","er","url","className","src","window","initTurnSlide"],"mappings":"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","file":"js/turn-slide-embed-a2fcf7c2480a7c5db6f7.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 23);\n","document.addEventListener('DOMContentLoaded', () => {\n let pickerElm = document.getElementById('turn-slide-1');\n let data = JSON.parse(document.getElementById('turn-slide-data').innerHTML);\n\n fetch(pickerElm.getAttribute('data-package-url'), {headers: {'Accept': 'application/json'}}).then(resp => {\n return resp.json()\n }).then(areaData => {\n initTurnSlide(pickerElm, {...data, ...areaData}); \n }).catch((err) => {\n handleLoadError(err)\n })\n\n function initTurnSlide(elm, data){\n let loadingElm = elm.getElementsByClassName('turn-slide-loading')[0];\n let dragContainer = elm.getElementsByClassName('turn-slide-links')[0];\n let imagesContainer = elm.getElementsByClassName('turn-slide-images')[0];\n let hudContainer = elm.getElementsByClassName('turn-slide-hud')[0];\n \n let apartmentInfoContainer = elm.getElementsByClassName('turn-slide-apartment-selected')[0];\n\n\n let infoContainer = elm.getElementsByClassName('turn-slide-info')[0];\n let infoContainerElms = { 'rooms' : infoContainer.getElementsByClassName('turn-slide-info-rooms')[0],\n 'area' : infoContainer.getElementsByClassName('turn-slide-info-area')[0],\n 'status' : infoContainer.getElementsByClassName('turn-slide-info-status')[0],\n 'price' : infoContainer.getElementsByClassName('turn-slide-info-price')[0]\n };\n\n let filterResultsNumElm = elm.getElementsByClassName('turn-slide-filter-results-num-results')[0];\n let filterBtnElm = elm.getElementsByClassName('turn-slide-filter')[0];\n let filtersActiveElm = elm.getElementsByClassName('turn-slide-filter-bubble')[0];\n\n let defaultSet = 0;\n let currentSet = 0;\n let selectedImage = 0;\n\n let selectedPathElm = null;\n\n let dragTools = {};\n let activeFilters = {'roomsMoreThan' : false, 'priceLessThan' : false}\n\n let imageSets = [];\n \n // Filtering and listing capabillities\n let currentFilters = [];\n let filteredData = [];\n\n let selectedApartment = null;\n\n\n\n // Find Default Imageset and load HUD data\n for(let i = 0; i < data['image_sets'].length; i++){\n let div = document.createElement('div'); \n div.textContent = data['image_sets'][i]['label'];\n if(data['image_sets'][i]['default']){\n defaultSet = i;\n div.classList.add('turn-slide-selected-hud-option');\n }\n div.setAttribute('image-set-id', i);\n div.addEventListener('click', gotoImageSet);\n\n hudContainer.appendChild(div);\n imageSets.push(data['image_sets'][i]['label']) \n } \n\n\n let imagesContainerBox = imagesContainer.getBoundingClientRect()\n\n let w_ratio = Math.round(imagesContainerBox.width)/1920;\n let h_ratio = Math.round(imagesContainerBox.height)/1080;\n\n let resizeFunction = debounce((e) => {\n let imagesContainerBox = imagesContainer.getBoundingClientRect()\n w_ratio = Math.round(imagesContainerBox.width)/1920;\n h_ratio = Math.round(imagesContainerBox.height)/1080; \n buildLinks();\n selectImage(selectedImage);\n dragContainer.classList.remove('resizing');\n }, 200)\n\n window.addEventListener('resize', () => {\n dragContainer.classList.add('resizing');\n resizeFunction()\n })\n\n buildLinks();\n\n\n loadImagesForSet(defaultSet);\n\n //Add Draggning\n dragContainer.addEventListener('mousedown', dragStart);\n dragContainer.addEventListener('touchstart', dragStart);\n\n dragContainer.addEventListener('mouseleave', dragEnd);\n dragContainer.addEventListener('mouseup', dragEnd);\n dragContainer.addEventListener('touchend', dragEnd);\n\n\n // Toggle Filter Panel Event listner \n elm.getElementsByClassName('turn-slide-filter')[0].addEventListener('click', toggleFilterPanel);\n\n // Fill Panel with all objejts in a pre filtered state\n drawFilteredList(filterObjects(activeFilters));\n\n // Add Filter event Handlers\n elm.getElementsByClassName('turn-slide-filter-controls-num-rooms')[0].addEventListener('change', updateRoomsFilter);\n elm.getElementsByClassName('turn-slide-filter-controls-price')[0].addEventListener('change', updatePriceFilter);\n elm.getElementsByClassName('turn-slide-filter-controls-availability')[0].addEventListener('change', updateStateFilter);\n\n function updateRoomsFilter(e){\n activeFilters['roomsMoreThan'] = e.target.value;\n drawFilteredList(filterObjects(activeFilters));\n }\n\n function updatePriceFilter(e){\n activeFilters['priceLessThan'] = e.target.value;\n drawFilteredList(filterObjects(activeFilters));\n }\n\n function updateStateFilter(e){\n activeFilters['state'] = e.target.value\n drawFilteredList(filterObjects(activeFilters));\n }\n\n function toggleFilterPanel(){\n let filterCont = elm.getElementsByClassName('turn-slide-filter-container')[0];\n\n // Close the open container\n if(filterCont.classList.contains('open')){\n filterCont.classList.remove('open'); \n hudContainer.classList.remove('hideHud');\n elm.getElementsByClassName('turn-slide-filter')[0].classList.toggle('filter-active'); \n\n } else {\n filterCont.classList.add('open'); \n hudContainer.classList.add('hideHud');\n elm.getElementsByClassName('turn-slide-filter')[0].classList.toggle('filter-active'); \n }\n\n\n if(apartmentInfoContainer.classList.contains('open')){\n closeApartmentInfoPane();\n }\n }\n\n // Criterias are an array of \n function filterObjects(criterias){\n let filteredList = {}\n\n let objectsToFilter = Object.entries(data['objects']);\n\n let filtersActive = 0\n if(criterias['roomsMoreThan']){\n filtersActive += 1;\n }\n if(criterias['priceLessThan']){\n filtersActive += 1; \n }\n if(criterias['state']){\n filtersActive += 1;\n }\n\n if(filtersActive > 0){\n filterBtnElm.classList.add('turn-slide-filter-filters-enabled');\n filtersActiveElm.textContent = filtersActive;\n } else {\n filterBtnElm.classList.remove('turn-slide-filter-filters-enabled');\n filtersActiveElm.textContent = 0;\n }\n\n filteredList = objectsToFilter.filter(function(entry){\n var objData = entry[1];\n if(criterias['roomsMoreThan'] && criterias['roomsMoreThan'] > objData['room_count']) {\n return false;\n }\n if(criterias['priceLessThan'] && criterias['priceLessThan'] < Number(objData['price']) ) { \n return false;\n }\n if(criterias['state'] && objData['state'] != criterias['state']){\n return false\n }\n return true;\n });\n\n // Update the visuals of all filtered objects\n if(filtersActive > 0){\n setFilteredObjectsClass(filteredList);\n } else {\n setFilteredObjectsClass([]);\n }\n return filteredList;\n }\n function drawFilteredList(listOfRows){\n\n\n filterResultsNumElm.textContent = listOfRows.length;\n\n const fragment = new DocumentFragment();\n for(let i = 0; i < listOfRows.length; i++){\n const tr = document.createElement('tr');\n const columns = ['title', 'room_count','area_size','price','monthly_fee','state'];\n for(let j = 0; j < columns.length; j++){\n const td = document.createElement('td');\n // Number formaters\n if(columns[j] == 'price'){\n td.textContent = priceFormater(listOfRows[i][1][columns[j]])\n } else if (columns[j] == 'state'){\n td.textContent = stateFormater(listOfRows[i][1][columns[j]])\n } else if (columns[j] == 'stairs'){\n td.textContent = \"-\"\n } else if (columns[j] == 'monthly_fee'){\n td.textContent = priceFormater(listOfRows[i][1][columns[j]])\n } else {\n td.textContent = listOfRows[i][1][columns[j]];\n }\n \n tr.appendChild(td);\n }\n\n tr.addEventListener('click', function(){\n toggleFilterPanel();\n openApartmentInfoPane(listOfRows[i][0]);\n })\n fragment.appendChild(tr)\n } \n elm.getElementsByClassName('turn-slide-filter-tbody')[0].replaceChildren(fragment);\n if(!listOfRows.length){\n elm.querySelector('.turn-slide-table-empty-marker').style.display = 'block'\n }else{\n elm.querySelector('.turn-slide-table-empty-marker').style.display = 'hidden' \n }\n }\n\n function setFilteredObjectsClass(listOfRows){\n dragContainer.setAttribute(\"class\", \"turn-slide-links\");\n\n addApartmentSelectionClass(selectedApartment);\n for(let i = 0; i < listOfRows.length; i++){\n dragContainer.classList.add(listOfRows[i][0] + '_filtered');\n }\n }\n\n function buildLinks(){\n data['areaElms'] = [];\n const fragment = new DocumentFragment();\n let div = document.createElement('div'); \n for(let i = 0; i < data['areas'].length; i++){\n let svg = document.createElementNS(\"http://www.w3.org/2000/svg\", 'svg') \n svg.classList.add(\"turn-slide-link-container\");\n svg.classList.add(\"turn-slide-link-container-\" + i); \n let areas = data['areas'][i];\n\n for(var j = 0; j < areas.length; j++){\n var poly = document.createElementNS(\"http://www.w3.org/2000/svg\", 'polygon')\n poly.setAttribute('points', areas[j].coords.coords.reduce(function(str, coord){\n str += ` ${coord['x']*w_ratio}, ${coord['y']*h_ratio}`\n return str\n }, ''));\n\n poly.classList.add(\"turn-slide-link\");\n poly.classList.add(\"turn-slide-link-\" + areas[j].identifier);\n\n if(areas[j].identifier && data['objects'] && data['objects'][areas[j].identifier] && data['objects'][areas[j].identifier][\"state\"]){\n poly.classList.add(\"turn-slide-link-\" + data['objects'][areas[j].identifier][\"state\"]); \n }\n\n poly.setAttribute('identifier', areas[j].identifier);\n poly.addEventListener('click', clickAreaInImage);\n poly.addEventListener('mouseover', hoverAreaInImage);\n poly.addEventListener('mouseout', leaveHoverAreaInImage);\n\n svg.appendChild(poly);\n }\n data['areaElms'].push(svg);\n fragment.appendChild(svg);\n }\n dragContainer.replaceChildren(fragment);\n }\n\n // stateFormater priceFormater\n function hoverAreaInImage(e) {\n const identifier = e.target.getAttribute('identifier');\n if(identifier && data['objects'] && data['objects'][identifier]){\n infoContainer.style.visibility = 'visible'; \n infoContainerElms['price'].textContent = priceFormater(data['objects'][identifier]['price']);\n infoContainerElms['rooms'].textContent = data['objects'][identifier]['room_count'];\n infoContainerElms['area'].textContent = data['objects'][identifier]['area_size'];\n infoContainerElms['status'].textContent = stateFormater( data['objects'][identifier]['state']);\n }\n }\n function closeApartmentInfoPane(){\n deSelectApartment();\n apartmentInfoContainer.classList.remove('open');\n selectedPathElm = null;\n hudContainer.classList.remove('hideHud');\n }\n\n function openApartmentInfoPane(identifier){\n if(apartmentInfoContainer.classList.contains('open') && identifier == selectedApartment){\n closeApartmentInfoPane();\n return;\n }\n addApartmentSelectionClass(identifier);\n\n // hydrate the panel\n const apartmentInfo = data['objects'][identifier];\n\n apartmentInfoContainer.getElementsByClassName('turn-slide-apartment-title')[0].textContent = apartmentInfo['title'] || identifier;\n apartmentInfoContainer.getElementsByClassName('turn-slide-apartment-rooms')[0].textContent = apartmentInfo['room_count'] || '-';\n apartmentInfoContainer.getElementsByClassName('turn-slide-apartment-state')[0].textContent = stateFormater(apartmentInfo['state']) || 'Okänt';\n apartmentInfoContainer.getElementsByClassName('turn-slide-apartment-price')[0].textContent = priceFormater(apartmentInfo['price']) || 'Ej satt';\n apartmentInfoContainer.getElementsByClassName('turn-slide-apartment-area')[0].textContent = apartmentInfo['area_size'] || '--';\n apartmentInfoContainer.getElementsByClassName('turn-slide-apartment-floor')[0].textContent = apartmentInfo['floor'] || '--';\n\n apartmentInfoContainer.getElementsByClassName('turn-slide-apartment-monthly-fee')[0].textContent = priceFormater(apartmentInfo['monthly_fee']) || 'ej satt';\n\n if(apartmentInfo['href']){\n apartmentInfoContainer.getElementsByClassName('turn-slide-apartment-read-more')[0].textContent = 'Läs mer'; \n apartmentInfoContainer.getElementsByClassName('turn-slide-apartment-read-more')[0].href = apartmentInfo['href'];\n apartmentInfoContainer.getElementsByClassName('turn-slide-apartment-read-more')[0].alt = apartmentInfo['alt']; \n } else {\n apartmentInfoContainer.getElementsByClassName('turn-slide-apartment-read-more')[0].textContent = ''; \n }\n\n // Add state to get correct bg color \n const titleContainer = apartmentInfoContainer.getElementsByClassName('turn-slide-apartment-selected-heading ')[0]\n titleContainer.setAttribute(\"class\", \"turn-slide-apartment-selected-heading\");\n titleContainer.classList.add('heading-state-' + apartmentInfo['state']);\n\n apartmentInfoContainer.classList.add('open');\n }\n function leaveHoverAreaInImage(e) {\n infoContainer.style.visibility = 'hidden'; \n }\n function deSelectApartment(){\n if(selectedApartment){\n dragContainer.classList.remove(selectedApartment + '_selected');\n selectedApartment = null;\n }\n }\n\n function addApartmentSelectionClass(identifier){\n if(!identifier){\n return;\n }\n if(selectedApartment){\n dragContainer.classList.remove(selectedApartment + '_selected');\n }\n selectedApartment = identifier;\n dragContainer.classList.add(selectedApartment + '_selected');\n }\n\n function clickAreaInImage(e,f){\n const identifier = e.target.getAttribute('identifier');\n\n if(identifier){\n selectedPathElm = e.target;\n openApartmentInfoPane(identifier);\n }\n }\n\n function selectImage(imageIndex){\n data['image_sets'][currentSet]['imageElms'][imageIndex].hidden = false;\n data['areaElms'][imageIndex].style.visibility = 'visible';\n selectedImage = imageIndex;\n }\n\n\n function gotoImageSet(e){ \n console.log(\"Next Image Set change from:\" + currentSet);\n let newSet = e.target.getAttribute('image-set-id');\n\n\n if(newSet != currentSet){\n hudContainer.getElementsByClassName('turn-slide-selected-hud-option')[0].classList.remove('turn-slide-selected-hud-option');\n e.target.classList.add('turn-slide-selected-hud-option');\n changeToImageSet(currentSet, newSet); \n }\n }\n\n function changeToImageSet(oldSetKey, newSetKey){\n let set = data['image_sets'][newSetKey];\n if(set['imageElms'] && set['imageElms'].length > 0 ){\n // Set is loaded\n data['image_sets'][oldSetKey]['imageContainerElm'].hidden = true;\n data['image_sets'][newSetKey]['imageContainerElm'].hidden = false;\n currentSet = newSetKey;\n\n // Set the correct selected image\n data['image_sets'][newSetKey]['imageElms'][selectedImage].hidden = false;\n\n } else {\n // Set is not loaded\n data['image_sets'][oldSetKey]['imageContainerElm'].hidden = true;\n loadingElm.classList.remove(\"loading-done\");\n loadImagesForSet(newSetKey);\n }\n // Switch Image\n if(data['image_sets'][oldSetKey]['imageElms']){\n data['image_sets'][oldSetKey]['imageElms'][selectedImage].hidden = true; \n }\n }\n\n\n function loadImagesForSet(setKey){\n currentSet = setKey;\n // Load Default ImagSset\n loadImageSet(setKey).then((list_of_loaded_elements) => {\n let set = data['image_sets'][setKey]; \n set['imageElms'] = list_of_loaded_elements;\n addImageSetToPage(setKey, imagesContainer, list_of_loaded_elements);\n selectImage(selectedImage);\n }).catch((err) => {\n // Loading the image set failed for some reason.\n handleLoadError(err)\n // Try Loading again\n });\n }\n\n function addImageSetToPage(setKey, container, imageElms){\n let setContainer = document.createElement(\"div\");\n imageElms.forEach((elm) => {\n setContainer.appendChild(elm);\n });\n container.appendChild(setContainer); // Add it to the dom\n data['image_sets'][setKey]['imageContainerElm'] = setContainer;\n loadingElm.classList.add(\"loading-done\");\n }\n\n // Functions for dragging\n function dragStart(e){\n\n var clientX = e.clientX\n if(e.touches && e.touches[0]){\n clientX = e.touches[0].clientX\n }\n\n var clientY = e.clientY\n if(e.touches && e.touches[0]){\n clientY = e.touches[0].clientY\n }\n\n dragTools['elm'] = dragContainer;\n dragTools['elmWidth'] = dragContainer.offsetWidth;\n dragTools['setLength'] = data['image_sets'][currentSet]['imageElms'].length\n dragTools['pixPerMove'] = dragContainer.offsetWidth / dragTools['setLength'];\n dragTools['startX'] = clientX;\n dragTools['startY'] = clientY;\n dragTools['startImageIndex'] = selectedImage;\n dragTools['currentImageIndex'] = selectedImage;\n\n dragContainer.addEventListener(\"mousemove\", mouse_move_detector);\n dragContainer.addEventListener(\"touchmove\", mouse_move_detector);\n dragContainer.classList.add('dragging')\n }\n\n function dragEnd(e) {\n selectedImage = dragTools['currentImageIndex'] || selectedImage;\n\n if(dragTools['elm']){\n dragTools['elm'].removeEventListener(\"mousemove\", mouse_move_detector);\n dragTools['elm'].removeEventListener(\"touchmove\", mouse_move_detector);\n dragTools['elm'] = false;\n dragTools = {};\n }\n }\n function mouse_move_detector(e){\n let direction = '';\n if (e.pageX < dragTools['startX']) {\n direction = 'right';\n } else if (e.pageX > dragTools['startX']) {\n direction = 'left';\n }\n\n var clientX = e.clientX\n if(e.touches && e.touches[0]){\n clientX = e.touches[0].clientX\n }\n\n let deltaX = dragTools['startX'] - clientX;\n\n let movePics = Math.round(deltaX / dragTools['pixPerMove']);\n\n let newPos = dragTools['startImageIndex'] + movePics;\n\n if(newPos >= dragTools['setLength']){ \n newPos = newPos - dragTools['setLength'];\n } \n if(newPos < 0){ \n newPos = dragTools['setLength'] + newPos;\n }\n\n let newElm = data['image_sets'][currentSet]['imageElms'][newPos];\n let oldElm = data['image_sets'][currentSet]['imageElms'][dragTools['currentImageIndex']];\n\n let newLinkElm = data['areaElms'][newPos];\n let oldLinkElm = data['areaElms'][dragTools['currentImageIndex']];\n\n\n\n if( newPos != dragTools['currentImageIndex'] && newElm && oldElm){\n newElm.hidden = false;\n oldElm.hidden = true;\n\n newLinkElm.style.visibility = 'visible';\n oldLinkElm.style.visibility = 'hidden';\n } else {\n if(newPos != dragTools['currentImageIndex'] ){\n console.log(\"Didn't find the elm\");\n }\n }\n dragTools['currentImageIndex'] = newPos;\n }\n\n function loadImageSet(setKey){ \n let set = data['image_sets'][setKey] \n if(!set || !set.images || !Array.isArray(set.images)){return Promise.reject(\"Set can't be found or set isn't a valid image set\")}\n return Promise.all(set.images.map(function(image_reference){\n return new Promise(function(resolve, reject){\n let el = new Image() \n el.onload = function(){\n el.hidden = true;\n resolve(el)\n }\n el.onerror = function(er){\n console.error(er)\n console.error(image_reference.url)\n\n reject(\"Image failed to load.\")\n }\n el.className = 'turn-slide-image';\n el.src = image_reference.url\n })\n })) \n }\n }\n function stateFormater(state){\n const states = {1 : 'Ledig', 2 : 'Bokat', 3 : 'Såld', 'available' : 'Ledig', 'booked' : 'Bokad', 'sold' : 'Såld' };\n return states[state];\n }\n\n function priceFormater(price) {\n return parseInt(price).toLocaleString('sv-Se', {currency: 'SEK', style: 'currency', maximumFractionDigits: 0});\n }\n\n\n function handleLoadError(err){\n console.error(\"A load error occurred.\")\n }\n\n function debounce (fn, delay) {\n var timeoutID = null\n return function () {\n clearTimeout(timeoutID)\n var args = arguments\n var that = this\n timeoutID = setTimeout(function () {\n fn.apply(that, args)\n }, delay)\n }\n }\n});"],"sourceRoot":""}