',templateBoundaries:["{{","}}"],transform:null},n={running:!1,node:null,token:null,paging:null,pool:[]};if(t)for(var i in o)void 0!==t[i]&&(o[i]=t[i]);e("string"==typeof o.target||"object"==typeof o.target,"target must be a string or DOM node, got "+o.target+" ("+typeof o.target+")"),e("string"==typeof o.accessToken||"function"==typeof o.accessToken,"accessToken must be a string or function, got "+o.accessToken+" ("+typeof o.accessToken+")"),e("number"==typeof o.accessTokenTimeout,"accessTokenTimeout must be a number, got "+o.accessTokenTimeout+" ("+typeof o.accessTokenTimeout+")"),e("number"==typeof o.apiTimeout,"apiTimeout must be a number, got "+o.apiTimeout+" ("+typeof o.apiTimeout+")"),e("boolean"==typeof o.debug,"debug must be true or false, got "+o.debug+" ("+typeof o.debug+")"),e("boolean"==typeof o.mock,"mock must be true or false, got "+o.mock+" ("+typeof o.mock+")"),e("object"==typeof o.templateBoundaries&&2===o.templateBoundaries.length&&"string"==typeof o.templateBoundaries[0]&&"string"==typeof o.templateBoundaries[1],"templateBoundaries must be an array of 2 strings, got "+o.templateBoundaries+" ("+typeof o.templateBoundaries+")"),e(!o.template||"string"==typeof o.template,"template must null or string, got "+o.template+" ("+typeof o.template+")"),e(!o.error||"function"==typeof o.error,"error must be null or function, got "+o.error+" ("+typeof o.error+")"),e(!o.before||"function"==typeof o.before,"before must be null or function, got "+o.before+" ("+typeof o.before+")"),e(!o.after||"function"==typeof o.after,"after must be null or function, got "+o.after+" ("+typeof o.after+")"),e(!o.success||"function"==typeof o.success,"success must be null or function, got "+o.success+" ("+typeof o.success+")"),e(!o.filter||"function"==typeof o.filter,"filter must be null or function, got "+o.filter+" ("+typeof o.filter+")"),e(!o.transform||"function"==typeof o.transform,"transform must be null or function, got "+o.transform+" ("+typeof o.transform+")"),e(!o.sort||"function"==typeof o.sort,"sort must be null or function, got "+o.sort+" ("+typeof o.sort+")"),e(!o.render||"function"==typeof o.render,"render must be null or function, got "+o.render+" ("+typeof o.render+")"),e(!o.limit||"number"==typeof o.limit,"limit must be null or number, got "+o.limit+" ("+typeof o.limit+")"),e(!o.apiLimit||"number"==typeof o.apiLimit,"apiLimit must null or number, got "+o.apiLimit+" ("+typeof o.apiLimit+")"),this._state=n,this._options=o}return t.prototype.run=function(){var e=this;return this._debug("run","options",this._options),this._debug("run","state",this._state),this._state.running?(this._debug("run","already running, skipping"),!1):(this._start(),this._debug("run","getting dom node"),"string"==typeof this._options.target?this._state.node=document.getElementById(this._options.target):this._state.node=this._options.target,this._state.node?(this._debug("run","got dom node",this._state.node),this._debug("run","getting access token"),this._getAccessToken((function(t,o){if(t)return e._debug("onTokenReceived","error",t),void e._fail(new Error("error getting access token: "+t.message));e._debug("onTokenReceived","got token",o),e._state.token=o,e._showNext((function(t){if(t)return e._debug("onNextShown","error",t),void e._fail(t);e._finish()}))})),!0):(this._fail(new Error("no element found with ID "+this._options.target)),!1))},t.prototype.hasNext=function(){var e=this._state.paging,t=this._state.pool;return this._debug("hasNext","paging",e),this._debug("hasNext","pool",t.length,t),t.length>0||e&&"string"==typeof e.next},t.prototype.next=function(){var e=this;return e.hasNext()?e._state.running?(e._debug("next","already running, skipping"),!1):(e._start(),void e._showNext((function(t){if(t)return e._debug("onNextShown","error",t),void e._fail(t);e._finish()}))):(e._debug("next","hasNext is false, skipping"),!1)},t.prototype._showNext=function(e){var t=this,o=null,n=null,i="number"==typeof this._options.limit;if(t._debug("showNext","pool",t._state.pool.length,t._state.pool),t._state.pool.length>0){if(n=i?t._state.pool.splice(0,t._options.limit):t._state.pool.splice(0),t._debug("showNext","items from pool",n.length,n),t._debug("showNext","updated pool",t._state.pool.length,t._state.pool),t._options.mock)t._debug("showNext","mock enabled, skipping render");else try{t._renderData(n)}catch(t){return void e(t)}e(null)}else t._state.paging&&"string"==typeof t._state.paging.next?o=t._state.paging.next:(o="https://graph.instagram.com/me/media?fields=caption,id,media_type,media_url,permalink,thumbnail_url,timestamp,username&access_token="+t._state.token,t._options.apiLimit||"number"!=typeof t._options.limit?"number"==typeof t._options.apiLimit&&(t._debug("showNext","apiLimit set, overriding limit",t._options.apiLimit,t._options.limit),o=o+"&limit="+t._options.apiLimit):(t._debug("showNext","no apiLimit set, falling back to limit",t._options.apiLimit,t._options.limit),o=o+"&limit="+t._options.limit)),t._debug("showNext","making request",o),t._makeApiRequest(o,(function(o,n){var i=null;if(o)return t._debug("onResponseReceived","error",o),void e(new Error("api request error: "+o.message));t._debug("onResponseReceived","data",n),t._success(n),t._debug("onResponseReceived","setting paging",n.paging),t._state.paging=n.paging;try{if(i=t._processData(n),t._debug("onResponseReceived","processed data",i),i.unused&&i.unused.length>0){t._debug("onResponseReceived","saving unused to pool",i.unused.length,i.unused);for(var s=0;s0&&(c=s.slice(s.length-r),this._debug("processData","unusedItems",c.length,c),s.splice(s.length-r,r))),{items:s,unused:c}},t.prototype._extractTags=function(e){var t=/#([^\s]+)/gi,o=/[~`!@#$%^&*\(\)\-\+={}\[\]:;"'<>\?,\./|\\\s]+/i,n=[],i=null;if("string"==typeof e)for(;null!==(i=t.exec(e));)!1===o.test(i[1])&&n.push(i[1]);return n},t.prototype._getItemData=function(e){var t=null,o=null;switch(e.media_type){case"IMAGE":t="image",o=e.media_url;break;case"VIDEO":t="video",o=e.thumbnail_url;break;case"CAROUSEL_ALBUM":t="album",o=e.media_url}return{caption:e.caption,tags:this._extractTags(e.caption),id:e.id,image:o,link:e.permalink,model:e,timestamp:e.timestamp,type:t,username:e.username}},t.prototype._renderData=function(e){var t="string"==typeof this._options.template,o="function"==typeof this._options.render,n=null,i=null,s=null,r="";if(this._debug("renderData","hasTemplate",t,"hasRender",o),!("object"!=typeof e||e.length<=0)){for(var a=0;a0;)this._debug("renderData","appending child",s.childNodes[0]),this._state.node.appendChild(s.childNodes[0])}},t.prototype._basicRender=function(e){for(var t=new RegExp(this._options.templateBoundaries[0]+"([\\s\\w.]+)"+this._options.templateBoundaries[1],"gm"),o=this._options.template,n=null,i="",s=0,r=null,a=null;null!==(n=t.exec(o));)r=n[1],i+=o.slice(s,n.index),(a=this._valueForKeyPath(r,e))&&(i+=a.toString()),s=t.lastIndex;return s=0)try{o=JSON.parse(i.responseText)}catch(e){return n._debug("apiRequestOnLoad","json parsing error",e,i.responseText),void s(new Error("error parsing response json"))}200===i.status?s(null,o):o&&o.error?s(new Error(o.error.code+" "+o.error.message)):s(new Error("status code "+i.status))},i.open("GET",e,!0),i.timeout=this._options.apiTimeout,i.send()},t.prototype._getAccessToken=function(e){var t=!1,o=this,n=null,i=function(o,i){t||(t=!0,clearTimeout(n),e(o,i))};if("function"==typeof this._options.accessToken){this._debug("getAccessToken","calling accessToken as function"),n=setTimeout((function(){o._debug("getAccessToken","timeout check",t),i(new Error("accessToken timed out"),null)}),this._options.accessTokenTimeout);try{this._options.accessToken((function(e,n){o._debug("getAccessToken","received accessToken callback",t,e,n),i(e,n)}))}catch(e){this._debug("getAccessToken","error invoking the accessToken as function",e),i(e,null)}}else this._debug("getAccessToken","treating accessToken as static",typeof this._options.accessToken),i(null,this._options.accessToken)},t.prototype._debug=function(){var e=null;this._options.debug&&console&&"function"==typeof console.log&&((e=[].slice.call(arguments))[0]="[Instafeed] ["+e[0]+"]",console.log.apply(null,e))},t.prototype._runHook=function(e,t){var o=!1;if("function"==typeof this._options[e])try{this._options[e](t),o=!0}catch(t){this._debug("runHook","error calling hook",e,t)}return o},t}()},371:e=>{"use strict";e.exports=window.Hotelwize}},t={};var o=function o(n){var i=t[n];if(void 0!==i)return i.exports;var s=t[n]={exports:{}};return e[n].call(s.exports,s,s.exports,o),s.exports}(509);self["Hotelwize.Plugins.Social.Instagram"]=o})(); let plugin = new globalThis['Hotelwize.Plugins.Social.Instagram'].InstagramFeed({ "id": 44, "instanceId": "22292b09-bc74-4fca-9d62-a44aab7a55a9", "instanceOrder": 0, "type": "generic", "isTypeDefault": false, "name": "Instagram Feed", "assemblyName": "Hotelwize.Plugins.Social.Instagram", "assemblyVersion": "1.2.2.0", "configuration": { "userName": "atolesretreat", "userId": "17841448831015552", "userAccessToken": "IGQVJYM183eUxsTERjQ1A5bEs4SGs2NURNUG9zX2ItUVVGdTFjYVdNbkhzUHIzWFpPWGJhWlY5eVpGSjJBckVDd0FsY2JoN0JnRnZAaYnVUYnpvSE55OHdMd3hRMHJyb1J6UWNNd1VB", "displayedPostsLimit": 12, "localeCode": "en-US" }, "trackers": [], "clientSettings": [], "clientSettingsLifetime": 2592000, "cookies": [] }); HotelwizeApp.registerPlugin(plugin, true); } OPEN MENU CLOSE MENU Home About Us Accommodation Atoles Villa with Private Pool and Caldera View Infinity Suite with Plunge Pool and Caldera View Serenity Suite with Plunge Pool and Caldera View Grace Suite with Plunge Pool and Caldera View Experiences Services Offers Atoles Retreat Loyalty Club Getaway Deal Stay More Pay Less Location Gallery Contact ΒΟΟΚ BOOK Experience the true essence of Santorinian Hospitality Check In < May 2025 > SunMonTueWedThuFriSat 12345678910111213141516171819202122232425262728293031 < 2025 > JanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember < 2020 - 2029 > 2020202120222023202420252026202720282029 Check Out < May 2025 > SunMonTueWedThuFriSat 12345678910111213141516171819202122232425262728293031 < 2025 > JanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember < 2020 - 2029 > 2020202120222023202420252026202720282029 Guests 2 Guests 2 Adults - +0 Children (3 - 12 y.o.) - +0 Infants (0 - 2 y.o.) - + Check Availability ACCOMMODATION A clear sky.An endless sea. A beautiful space. VIEW ROOMS SERVICESA wide array of exquisite quality services DISCOVER EXPERIENCESBespoke Concierge Service DISCOVER LOCATIONSerenity, colorful sunsets and Caldera magic DISCOVER GALLERY Soak up the simplicity follow us @atolesretreat ✕ Opening Offer 2023! Take advantage of our Opening Offer now! Book your holidays and get up to 20% discount on your room rates! BOOK NOW Close We use cookies to provide the services offered on our website to improve our user experience. Allow all Customize Disable all
Take advantage of our Opening Offer now!
Book your holidays and get up to 20% discount on your room rates!