We will look after your property while you're away.
Open & close homes
Click Here
We will look after your property while you're away.
Housewatch & regular property checks · Check the condition of the property
Click Here
We will look after your property while you're away.
We will coordinate repairs and maintenance
Click Here
We will look after your property while you're away.
Receive your deliveries
Click Here
add_action('wp_footer', function() { ?> window.LessonProgress={getStorageKey:function(){var body=document.body;var userId=null;var meta=document.querySelector('meta[name="current-user-id"]');if(meta){userId=meta.getAttribute('content')} if(!userId&&window.currentUser&&window.currentUser.id){userId=window.currentUser.id} if(!userId&&body){var match=body.className.match(/user-id-(\d+)/);if(match){userId=match[1]}} if(!userId&&body){userId=body.getAttribute('data-user-id')} if(!userId){userId=localStorage.getItem('lesson_user_id')} if(!userId){userId='guest'} return'lesson_progress_'+userId},getProgress:function(){try{var data=localStorage.getItem(this.getStorageKey());return data?JSON.parse(data):{}}catch(error){console.error('Could not read lesson progress:',error);return{}}},saveProgress:function(progress){try{localStorage.setItem(this.getStorageKey(),JSON.stringify(progress))}catch(error){console.error('Could not save lesson progress:',error)}},isCompleted:function(lessonId){var progress=this.getProgress();return!!progress[lessonId]},complete:function(lessonId){if(!lessonId)return;var progress=this.getProgress();progress[lessonId]={completed:!0,completedAt:new Date().toISOString()};this.saveProgress(progress);updateSidebarCheckmarks();document.dispatchEvent(new CustomEvent('lessonProgressUpdated',{detail:{lessonId:lessonId,completed:!0}}))},uncomplete:function(lessonId){if(!lessonId)return;var progress=this.getProgress();delete progress[lessonId];this.saveProgress(progress);updateSidebarCheckmarks();document.dispatchEvent(new CustomEvent('lessonProgressUpdated',{detail:{lessonId:lessonId,completed:!1}}))},toggle:function(lessonId){if(this.isCompleted(lessonId)){this.uncomplete(lessonId)}else{this.complete(lessonId)}}};function getCurrentLessonId(){var body=document.body;if(body){var bodyLessonId=body.getAttribute('data-lesson-id');if(bodyLessonId)return bodyLessonId;var postId=body.getAttribute('data-post-id');if(postId)return postId;var classes=body.className;var match=classes.match(/postid-(\d+)/);if(match)return match[1]} return null} function updateSidebarCheckmarks(){if(!window.LessonProgress)return;var progress=window.LessonProgress.getProgress();document.querySelectorAll('[data-lesson-id]').forEach(function(element){var lessonId=element.getAttribute('data-lesson-id');if(!lessonId)return;var completed=!!progress[lessonId];var existing=element.querySelector('.lesson-completion-check');if(existing)existing.remove();if(completed){var check=document.createElement('span');check.className='lesson-completion-check';check.textContent='✓ ';check.setAttribute('aria-hidden','true');element.insertBefore(check,element.firstChild)}})} function connectCpmButtonToProgress(){var btn=document.getElementById('cpm-complete-button');if(!btn)return;if(window.__cpmButtonConnected===!0){return} if(btn.getAttribute('data-progress-connected')==='true'){return} window.__cpmButtonConnected=!0;btn.setAttribute('data-progress-connected','true');btn.dataset.progressConnected='true';var lessonId=btn.getAttribute('data-lesson-complete')||btn.getAttribute('data-lesson-id')||getCurrentLessonId();if(lessonId){var isDone=window.LessonProgress.isCompleted(lessonId);btn.setAttribute('data-completed',isDone?'1':'0');var completedText=btn.getAttribute('data-completed-text');var incompleteText=btn.getAttribute('data-incomplete-text');if(isDone&&completedText){btn.textContent=completedText}else if(!isDone&&incompleteText){btn.textContent=incompleteText}} btn.addEventListener('click',function(){var lessonId=btn.getAttribute('data-lesson-complete')||btn.getAttribute('data-lesson-id')||getCurrentLessonId();if(!lessonId){console.warn('⚠️ No s\'ha trobat lessonId per al botó CPM');return} window.LessonProgress.toggle(lessonId);var completed=window.LessonProgress.isCompleted(lessonId);btn.setAttribute('data-completed',completed?'1':'0');var completedText=btn.getAttribute('data-completed-text');var incompleteText=btn.getAttribute('data-incomplete-text');if(completed&&completedText){btn.textContent=completedText}else if(!completed&&incompleteText){btn.textContent=incompleteText} console.log('✅ Progrés actualitzat per lessonId:',lessonId,'→',completed)})} if(document.readyState==='loading'){document.addEventListener('DOMContentLiteSpeedLoaded',function(){updateSidebarCheckmarks();connectCpmButtonToProgress()})}else{updateSidebarCheckmarks();connectCpmButtonToProgress()}