Plugin Directory

Changeset 3385288


Ignore:
Timestamp:
10/27/2025 02:31:28 PM (5 months ago)
Author:
slopeit
Message:

Release widget version 4.3.3

Location:
slope-widgets
Files:
18 added
4 deleted
60 edited
3 copied

Legend:

Unmodified
Added
Removed
  • slope-widgets/tags/4.3.3/css/slope-admin.css

    r3289147 r3385288  
    33@keyframes slope-spin{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}.slope-promo-container{width:100%!important}#slp-arrow-icon{height:1rem}#slp-settings-border-radius-container{display:flex;gap:10px;align-items:center}.slp-promotion-card{flex:1 1 300px;border-radius:10px;margin-bottom:1rem;position:relative;min-width:280px;display:flex;flex-direction:column}.slp-loading-spinner{width:40px;height:40px;border:4px solid #f3f3f3;border-top:4px solid #3498db;border-radius:50%;animation:slope-spin 2s linear infinite}.slp-error-message,.slp-loading-indicator{display:flex;justify-content:center;align-items:center;margin:auto}.slp-loading-indicator{padding:20px;width:100%}.slp-error-message{border-radius:10px;background:#eee;padding:30px;text-align:center}.slp-promotion-container{flex:1;display:flex;flex-direction:column;width:fit-content;max-width:100%;overflow:hidden}.slp-promotion-image{background-size:cover;background-repeat:no-repeat;background-position:center;padding:16px;min-height:180px}.slp-promotion-expiration-date{top:1rem;left:1rem;z-index:2;padding:4px 8px;border-radius:10px;font-size:.75rem;font-weight:700;width:fit-content}.slp-promotion-title{font-size:clamp(1rem,2.5vw,1.25rem);font-weight:700;line-height:1.3;margin-bottom:clamp(.5rem,2vw,1rem)}.slp-promotion-description{font-size:clamp(.875rem,2vw,1rem);line-height:1.5;-webkit-box-orient:vertical;white-space:normal;display:-webkit-box;overflow:hidden;text-overflow:ellipsis;max-width:100%;word-wrap:break-word}.slp-promotion-actions{display:flex;flex-direction:column;gap:.5rem;margin-top:auto}.slp-see-details{font-size:.9rem;align-self:flex-start;font-weight:700;display:flex;align-items:center;margin-bottom:.5rem;gap:.5rem}.slp-reserve-button{display:block;padding:.75rem 0;font-size:1rem;font-weight:700;border-radius:10px;text-decoration:none;text-align:center}.slp-modal,.slp-modal-overlay{z-index:1000;top:0;left:0;width:100%;height:100%}.slp-modal{position:fixed;background-color:rgba(0,0,0,.4);opacity:0;visibility:hidden;transition:opacity .3s ease,visibility .3s ease}.slp-modal-overlay{background-image:linear-gradient(to bottom,transparent 0,#d1d2da 250px,#d1d2da,#d1d2da);border-radius:10px;position:absolute}.slp-modal-container{background-size:100%,cover;background-repeat:no-repeat;background-position:top,center;padding:clamp(8px,2vw,12px);border-radius:10px;width:min(80vw,600px);z-index:1001;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.slp-close-modal-button{position:absolute;right:1rem;line-height:.5;top:1rem;font-size:24px;cursor:pointer;z-index:1003;border-radius:50%;padding:.5rem}.slp-modal-promotion-container{border-radius:10px;position:relative;z-index:1001;margin-top:clamp(10vh,16vh,24vh)}.slp-modal-promotion-details{max-width:100%;word-wrap:break-word;max-height:25vh;overflow-y:auto}.slp-modal-lodgings,.slp-modal-promotion-details{font-size:clamp(.875rem,2vw,1rem);margin-bottom:1rem;line-height:1.5}.slp-modal-visible{opacity:1;visibility:visible}.slp-modal-hidden{opacity:0;visibility:hidden}@media screen and (max-width:768px){.slp-modal-promotion-details{max-height:50vh}.slp-modal-container{width:90vw;background-size:150%,cover}}
    44.slp-welcome-button{display:inline-flex;align-items:center;right:10px;bottom:30px;height:36px;padding:0 10px;border-radius:3px;text-align:center;text-transform:uppercase;text-decoration:none}.slp-welcome-button #skip-icon{margin-right:8px}.slope-slp-welcome{width:99%}#slp-welcome-button-container{display:flex;flex-direction:row;gap:1rem;justify-content:space-between;margin-top:1rem}#slp-next-button{display:inline-flex;align-items:center;gap:2px;margin-right:1rem;height:36px;text-transform:uppercase;padding:0 10px;border-radius:3px;text-align:center;text-decoration:none}#slp-next-button-icon{width:10px;margin-right:5px}
    5 .slope-widgets-container{box-sizing:border-box}.slope-block{border-radius:.2rem;border:1px solid rgba(0,0,0,.1);line-height:1;margin:0 auto;max-width:900px;padding:8px;position:relative}.slope-block *{box-sizing:border-box}.slope-block .slope-reservation-section-container{cursor:pointer!important;text-align:left;padding:10px;border-radius:6px;display:flex;align-items:center}.slope-block .slope-reservation-section-container.slope-highlight:hover{background-color:rgba(0,0,0,.1)}.slope-block .slope-reservation-section-container .slope-check-in-container{margin:auto}.slope-block input[type=number]{-webkit-appearance:none;appearance:none;background:0 0;border-radius:0;border:0;color:inherit;display:block;font:inherit;margin:0;outline:0;padding:0;width:auto}.slope-block label{display:block;font-size:14px;text-align:left}.slope-block{min-height:225px}.slope-reservation-dates{display:flex;justify-content:space-between;padding-right:8px;width:100%}.slope-guests-and-button-container{width:100%;z-index:10}.slope-reservation-section-container.slope-check-out{justify-content:flex-end}.slope-block .slope-reservation-section-container .slope-guests-wrapper,.slope-reservation-section-container,.slope-reservation-section-container.slope-submit-section,.slope-reservation-submit{width:100%}.slope-guests-count-container{width:100%;text-align:right}.slope-cancel-guests,.slope-save-guests{background:0 0;display:inline-block;text-align:center;width:49%}.slope-horizontal-separator{border-bottom:solid 1px rgba(0,0,0,.1);display:block;margin-bottom:10px;margin-top:10px;width:100%}.slope-block .slope-check-out-wrapper{justify-content:flex-end;text-align:right}.slope-vertical-divider{display:none}.slope-reservation-dates .slope-reservation-icon-container{align-items:center;display:flex;justify-content:center;opacity:.4;width:20px}.dayContainer+.dayContainer{border-left:1px solid rgba(0,0,0,.1)}.slope-block .slope-rooms-count-container{padding-right:32px}.slope-guests-buttons-container{display:flex}.slope-block .slope-check-in-input,.slope-block .slope-check-out-input{border:0;height:0;left:0;padding:0;position:absolute;top:88px;visibility:hidden!important}.slope-block .slope-check-in-label,.slope-block .slope-check-out-label,.slope-block .slope-guests-label,.slope-block .slope-rooms-label{display:block!important;font-size:13px!important;height:15px!important;line-height:15px!important}.slope-block .slope-reservation-section-container .slope-guests-wrapper{white-space:nowrap;display:flex}.slope-block .slope-adults-count,.slope-block .slope-check-in-date,.slope-block .slope-check-out-date,.slope-block .slope-children-count,.slope-block .slope-guests-adults,.slope-block .slope-guests-children,.slope-block .slope-rooms-count{border-radius:.2rem;font-size:16px;line-height:20px;min-width:175px}.slope-block input[type=submit].slope-reservation-submit{border-radius:.2rem;font-size:14px!important;font-weight:500;line-height:20px;min-width:175px}.slope-stepper-container{animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1);border-radius:6px;border:1px solid rgba(0,0,0,.1);display:none;font-size:16px;line-height:16px;margin-top:10px;padding:10px;position:absolute;width:300px;z-index:9999}.slope-block input[type=text],.slope-stepper-container input[type=text]{border:0!important;cursor:default!important;font-size:inherit!important;margin-bottom:0!important;min-height:0!important;outline:0!important;padding:0!important}.slope-stepper-container input[type=text]{background-color:inherit!important}.slope-block button,.slope-block input[type=button],.slope-block input[type=reset],.slope-block input[type=submit],.slope-stepper-container button,.slope-stepper-container input[type=button],.slope-stepper-container input[type=reset],.slope-stepper-container input[type=submit]{border:0!important;cursor:pointer;font-family:inherit;font-size:inherit!important;margin-bottom:0!important;margin-top:0!important;min-height:30px!important;outline:0!important;padding:12px!important;text-transform:uppercase;transition:all .2s ease-in-out}.slope-block button:hover,.slope-block input[type=button]:hover,.slope-block input[type=reset]:hover,.slope-block input[type=submit]:hover,.slope-stepper-container button:hover,.slope-stepper-container input[type=button]:hover,.slope-stepper-container input[type=reset]:hover,.slope-stepper-container input[type=submit]:hover{opacity:.8}.slope-stepper-label{padding-bottom:1px}.slope-stepper-container input[type=number],.slope-stepper-container input[type=text]{width:auto}.slope-stepper-container .slope-stepper-value{text-align:center;margin:0;border:0;box-sizing:border-box;background:0 0!important}.slope-stepper-container .slope-decrement-button,.slope-stepper-container .slope-increment-button{align-items:center;background:0 0;border-radius:50%;cursor:pointer;display:flex;float:right;font-size:18px;font-weight:700;height:26px;justify-content:center;line-height:18px;margin:0!important;opacity:1;padding:0;text-align:center;text-decoration:none;transition:all .2s ease-in-out!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;width:26px}.slope-stepper-container .slope-stepper-value{width:44px!important}.slope-stepper-container .slope-guests-stepper,.slope-stepper-container .slope-rooms-stepper{display:flex}.slope-stepper-container .slope-horizontal-separator{width:100%;border-bottom:solid 1px rgba(0,0,0,.1);margin:10px 0;display:block!important}.slope-vertical-divider{border-left:1px solid rgba(0,0,0,.1);height:42px;margin-bottom:auto;margin-top:auto}.slope-guests-count-row,.slope-rooms-stepper-container{align-items:center;display:flex;justify-content:space-between;padding:10px}.slope-rooms-stepper{font-size:18px;padding:0}.slope-guests-count-row.slope-padding-top{padding-top:20px}.slope-children-age{font-size:12px}#slope-widget p,#slope-widget table td{border:0!important}.slope-stepper-container .slope-room-label{padding:10px;font-size:16px;font-weight:700}@media (min-width:992px){.slp-responsive-layout.slope-block{display:flex;justify-content:space-between;min-height:auto;min-width:900px}.slp-responsive-layout .slope-horizontal-separator{display:none}.slp-responsive-layout .slope-guests-and-button-container{width:65%;padding-left:8px;display:flex;justify-content:space-between}.slp-responsive-layout .slope-reservation-dates{width:35%}.slp-responsive-layout .slope-vertical-divider{display:block}.slp-responsive-layout .slope-reservation-dates .slope-reservation-icon-container{width:60px}.slp-responsive-layout .slope-reservation-section-container,.slp-responsive-layout .slope-reservation-section-container.slope-submit-section{width:50%}.slp-responsive-layout .slope-guests-count-container{text-align:left}}
     5.slope-widgets-container{box-sizing:border-box}.slope-justify-flex-end{justify-content:flex-end}.slope-width-100{width:100%}.slope-block{border-radius:.2rem;border:1px solid rgba(0,0,0,.1);line-height:1;margin:0 auto;max-width:900px;padding:8px;position:relative}.slope-block *{box-sizing:border-box}.slope-block .slope-reservation-section-container{cursor:pointer!important;text-align:left;padding:10px;border-radius:6px;display:flex;align-items:center}.slope-block .slope-reservation-section-container.slope-highlight:hover{background-color:rgba(0,0,0,.1)}.slope-block .slope-reservation-section-container .slope-check-in-container{margin:auto}.slope-block input[type=number]{-webkit-appearance:none;appearance:none;background:0 0;border-radius:0;border:0;color:inherit;display:block;font:inherit;margin:0;outline:0;padding:0;width:auto}.slope-block label{display:block;font-size:14px;text-align:left}.slope-block{min-height:225px}.slope-reservation-dates{display:flex;justify-content:space-between;padding-right:8px}.slope-guests-and-button-container{z-index:10}.slope-block .slope-reservation-section-container .slope-guests-wrapper,.slope-reservation-section-container{width:100%}.slope-guests-count-container{width:100%;text-align:right}.slope-cancel-guests,.slope-save-guests{background:0 0;display:inline-block;text-align:center;width:49%}.slope-horizontal-separator{border-bottom:solid 1px rgba(0,0,0,.1);display:block;margin-bottom:10px;margin-top:10px}.slope-block .slope-check-out-wrapper{text-align:right}.slope-vertical-divider{display:none}.slope-reservation-dates .slope-reservation-icon-container{align-items:center;display:flex;justify-content:center;opacity:.4;width:20px}.dayContainer+.dayContainer{border-left:1px solid rgba(0,0,0,.1)}.slope-block .slope-rooms-count-container{padding-right:32px}.slope-guests-buttons-container{display:flex}.slope-block .slope-check-in-input,.slope-block .slope-check-out-input{border:0;height:0;left:0;padding:0;position:absolute;top:88px;visibility:hidden!important}.slope-block .slope-check-in-label,.slope-block .slope-check-out-label,.slope-block .slope-guests-label,.slope-block .slope-rooms-label{display:block!important;font-size:13px!important;height:15px!important;line-height:15px!important}.slope-block .slope-reservation-section-container .slope-guests-wrapper{white-space:nowrap;display:flex}.slope-block .slope-adults-count,.slope-block .slope-check-in-date,.slope-block .slope-check-out-date,.slope-block .slope-children-count,.slope-block .slope-guests-adults,.slope-block .slope-guests-children,.slope-block .slope-rooms-count{border-radius:.2rem;font-size:16px;line-height:20px;min-width:175px}.slope-block input[type=submit].slope-reservation-submit{border-radius:.2rem;font-size:14px!important;font-weight:500;line-height:20px;min-width:175px}.slope-stepper-container{animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1);border-radius:6px;border:1px solid rgba(0,0,0,.1);display:none;font-size:16px;line-height:16px;margin-top:10px;padding:10px;position:absolute;width:300px;z-index:9999}.slope-block input[type=text],.slope-stepper-container input[type=text]{border:0!important;cursor:default!important;font-size:inherit!important;margin-bottom:0!important;min-height:0!important;outline:0!important;padding:0!important}.slope-stepper-container input[type=text]{background-color:inherit!important}.slope-block button,.slope-block input[type=button],.slope-block input[type=reset],.slope-block input[type=submit],.slope-stepper-container button,.slope-stepper-container input[type=button],.slope-stepper-container input[type=reset],.slope-stepper-container input[type=submit]{border:0!important;cursor:pointer;font-family:inherit;font-size:inherit!important;margin-bottom:0!important;margin-top:0!important;min-height:30px!important;outline:0!important;padding:12px!important;text-transform:uppercase;transition:all .2s ease-in-out}.slope-block button:hover,.slope-block input[type=button]:hover,.slope-block input[type=reset]:hover,.slope-block input[type=submit]:hover,.slope-stepper-container button:hover,.slope-stepper-container input[type=button]:hover,.slope-stepper-container input[type=reset]:hover,.slope-stepper-container input[type=submit]:hover{opacity:.8}.slope-stepper-label{padding-bottom:1px}.slope-stepper-container input[type=number],.slope-stepper-container input[type=text]{width:auto}.slope-stepper-container .slope-stepper-value{text-align:center;margin:0;border:0;box-sizing:border-box;background:0 0!important}.slope-stepper-container .slope-decrement-button,.slope-stepper-container .slope-increment-button{align-items:center;background:0 0;border-radius:50%;cursor:pointer;display:flex;float:right;font-size:18px;font-weight:700;height:26px;justify-content:center;line-height:18px;margin:0!important;opacity:1;padding:0;text-align:center;text-decoration:none;transition:all .2s ease-in-out!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;width:26px}.slope-stepper-container .slope-stepper-value{width:44px!important}.slope-stepper-container .slope-guests-stepper,.slope-stepper-container .slope-rooms-stepper{display:flex}.slope-stepper-container .slope-horizontal-separator{width:100%;border-bottom:solid 1px rgba(0,0,0,.1);margin:10px 0;display:block!important}.slope-vertical-divider{border-left:1px solid rgba(0,0,0,.1);height:42px;margin-bottom:auto;margin-top:auto}.slope-guests-count-row,.slope-rooms-stepper-container{align-items:center;display:flex;justify-content:space-between;padding:10px}.slope-rooms-stepper{font-size:18px;padding:0}.slope-guests-count-row.slope-padding-top{padding-top:20px}.slope-children-age{font-size:12px}#slope-widget p,#slope-widget table td{border:0!important}.slope-stepper-container .slope-room-label{padding:10px;font-size:16px;font-weight:700}@media (min-width:992px){.slp-responsive-layout.slope-block{display:flex;justify-content:space-between;min-height:auto;min-width:900px}.slp-responsive-layout .slope-horizontal-separator{display:none}.slp-responsive-layout .slope-guests-and-button-container{width:65%;padding-left:8px;display:flex;justify-content:space-between}.slp-responsive-layout .slope-reservation-dates{width:35%}.slp-responsive-layout .slope-vertical-divider{display:block}.slp-responsive-layout .slope-reservation-dates .slope-reservation-icon-container{width:60px}.slp-responsive-layout .slope-reservation-section-container,.slp-responsive-layout .slope-reservation-section-container.slope-submit-section{width:50%}.slp-responsive-layout .slope-guests-count-container{text-align:left}}
  • slope-widgets/tags/4.3.3/css/slope-widgets.css

    r3289147 r3385288  
    1 .slope-widgets-container{box-sizing:border-box}.slope-block{border-radius:.2rem;border:1px solid rgba(0,0,0,.1);line-height:1;margin:0 auto;max-width:900px;padding:8px;position:relative}.slope-block *{box-sizing:border-box}.slope-block .slope-reservation-section-container{cursor:pointer!important;text-align:left;padding:10px;border-radius:6px;display:flex;align-items:center}.slope-block .slope-reservation-section-container.slope-highlight:hover{background-color:rgba(0,0,0,.1)}.slope-block .slope-reservation-section-container .slope-check-in-container{margin:auto}.slope-block input[type=number]{-webkit-appearance:none;appearance:none;background:0 0;border-radius:0;border:0;color:inherit;display:block;font:inherit;margin:0;outline:0;padding:0;width:auto}.slope-block label{display:block;font-size:14px;text-align:left}.slope-block{min-height:225px}.slope-reservation-dates{display:flex;justify-content:space-between;padding-right:8px;width:100%}.slope-guests-and-button-container{width:100%;z-index:10}.slope-reservation-section-container.slope-check-out{justify-content:flex-end}.slope-block .slope-reservation-section-container .slope-guests-wrapper,.slope-reservation-section-container,.slope-reservation-section-container.slope-submit-section,.slope-reservation-submit{width:100%}.slope-guests-count-container{width:100%;text-align:right}.slope-cancel-guests,.slope-save-guests{background:0 0;display:inline-block;text-align:center;width:49%}.slope-horizontal-separator{border-bottom:solid 1px rgba(0,0,0,.1);display:block;margin-bottom:10px;margin-top:10px;width:100%}.slope-block .slope-check-out-wrapper{justify-content:flex-end;text-align:right}.slope-vertical-divider{display:none}.slope-reservation-dates .slope-reservation-icon-container{align-items:center;display:flex;justify-content:center;opacity:.4;width:20px}.dayContainer+.dayContainer{border-left:1px solid rgba(0,0,0,.1)}.slope-block .slope-rooms-count-container{padding-right:32px}.slope-guests-buttons-container{display:flex}.slope-block .slope-check-in-input,.slope-block .slope-check-out-input{border:0;height:0;left:0;padding:0;position:absolute;top:88px;visibility:hidden!important}.slope-block .slope-check-in-label,.slope-block .slope-check-out-label,.slope-block .slope-guests-label,.slope-block .slope-rooms-label{display:block!important;font-size:13px!important;height:15px!important;line-height:15px!important}.slope-block .slope-reservation-section-container .slope-guests-wrapper{white-space:nowrap;display:flex}.slope-block .slope-adults-count,.slope-block .slope-check-in-date,.slope-block .slope-check-out-date,.slope-block .slope-children-count,.slope-block .slope-guests-adults,.slope-block .slope-guests-children,.slope-block .slope-rooms-count{border-radius:.2rem;font-size:16px;line-height:20px;min-width:175px}.slope-block input[type=submit].slope-reservation-submit{border-radius:.2rem;font-size:14px!important;font-weight:500;line-height:20px;min-width:175px}.slope-stepper-container{animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1);border-radius:6px;border:1px solid rgba(0,0,0,.1);display:none;font-size:16px;line-height:16px;margin-top:10px;padding:10px;position:absolute;width:300px;z-index:9999}.slope-block input[type=text],.slope-stepper-container input[type=text]{border:0!important;cursor:default!important;font-size:inherit!important;margin-bottom:0!important;min-height:0!important;outline:0!important;padding:0!important}.slope-stepper-container input[type=text]{background-color:inherit!important}.slope-block button,.slope-block input[type=button],.slope-block input[type=reset],.slope-block input[type=submit],.slope-stepper-container button,.slope-stepper-container input[type=button],.slope-stepper-container input[type=reset],.slope-stepper-container input[type=submit]{border:0!important;cursor:pointer;font-family:inherit;font-size:inherit!important;margin-bottom:0!important;margin-top:0!important;min-height:30px!important;outline:0!important;padding:12px!important;text-transform:uppercase;transition:all .2s ease-in-out}.slope-block button:hover,.slope-block input[type=button]:hover,.slope-block input[type=reset]:hover,.slope-block input[type=submit]:hover,.slope-stepper-container button:hover,.slope-stepper-container input[type=button]:hover,.slope-stepper-container input[type=reset]:hover,.slope-stepper-container input[type=submit]:hover{opacity:.8}.slope-stepper-label{padding-bottom:1px}.slope-stepper-container input[type=number],.slope-stepper-container input[type=text]{width:auto}.slope-stepper-container .slope-stepper-value{text-align:center;margin:0;border:0;box-sizing:border-box;background:0 0!important}.slope-stepper-container .slope-decrement-button,.slope-stepper-container .slope-increment-button{align-items:center;background:0 0;border-radius:50%;cursor:pointer;display:flex;float:right;font-size:18px;font-weight:700;height:26px;justify-content:center;line-height:18px;margin:0!important;opacity:1;padding:0;text-align:center;text-decoration:none;transition:all .2s ease-in-out!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;width:26px}.slope-stepper-container .slope-stepper-value{width:44px!important}.slope-stepper-container .slope-guests-stepper,.slope-stepper-container .slope-rooms-stepper{display:flex}.slope-stepper-container .slope-horizontal-separator{width:100%;border-bottom:solid 1px rgba(0,0,0,.1);margin:10px 0;display:block!important}.slope-vertical-divider{border-left:1px solid rgba(0,0,0,.1);height:42px;margin-bottom:auto;margin-top:auto}.slope-guests-count-row,.slope-rooms-stepper-container{align-items:center;display:flex;justify-content:space-between;padding:10px}.slope-rooms-stepper{font-size:18px;padding:0}.slope-guests-count-row.slope-padding-top{padding-top:20px}.slope-children-age{font-size:12px}#slope-widget p,#slope-widget table td{border:0!important}.slope-stepper-container .slope-room-label{padding:10px;font-size:16px;font-weight:700}@media (min-width:992px){.slp-responsive-layout.slope-block{display:flex;justify-content:space-between;min-height:auto;min-width:900px}.slp-responsive-layout .slope-horizontal-separator{display:none}.slp-responsive-layout .slope-guests-and-button-container{width:65%;padding-left:8px;display:flex;justify-content:space-between}.slp-responsive-layout .slope-reservation-dates{width:35%}.slp-responsive-layout .slope-vertical-divider{display:block}.slp-responsive-layout .slope-reservation-dates .slope-reservation-icon-container{width:60px}.slp-responsive-layout .slope-reservation-section-container,.slp-responsive-layout .slope-reservation-section-container.slope-submit-section{width:50%}.slp-responsive-layout .slope-guests-count-container{text-align:left}}
     1.slope-widgets-container{box-sizing:border-box}.slope-justify-flex-end{justify-content:flex-end}.slope-width-100{width:100%}.slope-block{border-radius:.2rem;border:1px solid rgba(0,0,0,.1);line-height:1;margin:0 auto;max-width:900px;padding:8px;position:relative}.slope-block *{box-sizing:border-box}.slope-block .slope-reservation-section-container{cursor:pointer!important;text-align:left;padding:10px;border-radius:6px;display:flex;align-items:center}.slope-block .slope-reservation-section-container.slope-highlight:hover{background-color:rgba(0,0,0,.1)}.slope-block .slope-reservation-section-container .slope-check-in-container{margin:auto}.slope-block input[type=number]{-webkit-appearance:none;appearance:none;background:0 0;border-radius:0;border:0;color:inherit;display:block;font:inherit;margin:0;outline:0;padding:0;width:auto}.slope-block label{display:block;font-size:14px;text-align:left}.slope-block{min-height:225px}.slope-reservation-dates{display:flex;justify-content:space-between;padding-right:8px}.slope-guests-and-button-container{z-index:10}.slope-block .slope-reservation-section-container .slope-guests-wrapper,.slope-reservation-section-container{width:100%}.slope-guests-count-container{width:100%;text-align:right}.slope-cancel-guests,.slope-save-guests{background:0 0;display:inline-block;text-align:center;width:49%}.slope-horizontal-separator{border-bottom:solid 1px rgba(0,0,0,.1);display:block;margin-bottom:10px;margin-top:10px}.slope-block .slope-check-out-wrapper{text-align:right}.slope-vertical-divider{display:none}.slope-reservation-dates .slope-reservation-icon-container{align-items:center;display:flex;justify-content:center;opacity:.4;width:20px}.dayContainer+.dayContainer{border-left:1px solid rgba(0,0,0,.1)}.slope-block .slope-rooms-count-container{padding-right:32px}.slope-guests-buttons-container{display:flex}.slope-block .slope-check-in-input,.slope-block .slope-check-out-input{border:0;height:0;left:0;padding:0;position:absolute;top:88px;visibility:hidden!important}.slope-block .slope-check-in-label,.slope-block .slope-check-out-label,.slope-block .slope-guests-label,.slope-block .slope-rooms-label{display:block!important;font-size:13px!important;height:15px!important;line-height:15px!important}.slope-block .slope-reservation-section-container .slope-guests-wrapper{white-space:nowrap;display:flex}.slope-block .slope-adults-count,.slope-block .slope-check-in-date,.slope-block .slope-check-out-date,.slope-block .slope-children-count,.slope-block .slope-guests-adults,.slope-block .slope-guests-children,.slope-block .slope-rooms-count{border-radius:.2rem;font-size:16px;line-height:20px;min-width:175px}.slope-block input[type=submit].slope-reservation-submit{border-radius:.2rem;font-size:14px!important;font-weight:500;line-height:20px;min-width:175px}.slope-stepper-container{animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1);border-radius:6px;border:1px solid rgba(0,0,0,.1);display:none;font-size:16px;line-height:16px;margin-top:10px;padding:10px;position:absolute;width:300px;z-index:9999}.slope-block input[type=text],.slope-stepper-container input[type=text]{border:0!important;cursor:default!important;font-size:inherit!important;margin-bottom:0!important;min-height:0!important;outline:0!important;padding:0!important}.slope-stepper-container input[type=text]{background-color:inherit!important}.slope-block button,.slope-block input[type=button],.slope-block input[type=reset],.slope-block input[type=submit],.slope-stepper-container button,.slope-stepper-container input[type=button],.slope-stepper-container input[type=reset],.slope-stepper-container input[type=submit]{border:0!important;cursor:pointer;font-family:inherit;font-size:inherit!important;margin-bottom:0!important;margin-top:0!important;min-height:30px!important;outline:0!important;padding:12px!important;text-transform:uppercase;transition:all .2s ease-in-out}.slope-block button:hover,.slope-block input[type=button]:hover,.slope-block input[type=reset]:hover,.slope-block input[type=submit]:hover,.slope-stepper-container button:hover,.slope-stepper-container input[type=button]:hover,.slope-stepper-container input[type=reset]:hover,.slope-stepper-container input[type=submit]:hover{opacity:.8}.slope-stepper-label{padding-bottom:1px}.slope-stepper-container input[type=number],.slope-stepper-container input[type=text]{width:auto}.slope-stepper-container .slope-stepper-value{text-align:center;margin:0;border:0;box-sizing:border-box;background:0 0!important}.slope-stepper-container .slope-decrement-button,.slope-stepper-container .slope-increment-button{align-items:center;background:0 0;border-radius:50%;cursor:pointer;display:flex;float:right;font-size:18px;font-weight:700;height:26px;justify-content:center;line-height:18px;margin:0!important;opacity:1;padding:0;text-align:center;text-decoration:none;transition:all .2s ease-in-out!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;width:26px}.slope-stepper-container .slope-stepper-value{width:44px!important}.slope-stepper-container .slope-guests-stepper,.slope-stepper-container .slope-rooms-stepper{display:flex}.slope-stepper-container .slope-horizontal-separator{width:100%;border-bottom:solid 1px rgba(0,0,0,.1);margin:10px 0;display:block!important}.slope-vertical-divider{border-left:1px solid rgba(0,0,0,.1);height:42px;margin-bottom:auto;margin-top:auto}.slope-guests-count-row,.slope-rooms-stepper-container{align-items:center;display:flex;justify-content:space-between;padding:10px}.slope-rooms-stepper{font-size:18px;padding:0}.slope-guests-count-row.slope-padding-top{padding-top:20px}.slope-children-age{font-size:12px}#slope-widget p,#slope-widget table td{border:0!important}.slope-stepper-container .slope-room-label{padding:10px;font-size:16px;font-weight:700}@media (min-width:992px){.slp-responsive-layout.slope-block{display:flex;justify-content:space-between;min-height:auto;min-width:900px}.slp-responsive-layout .slope-horizontal-separator{display:none}.slp-responsive-layout .slope-guests-and-button-container{width:65%;padding-left:8px;display:flex;justify-content:space-between}.slp-responsive-layout .slope-reservation-dates{width:35%}.slp-responsive-layout .slope-vertical-divider{display:block}.slp-responsive-layout .slope-reservation-dates .slope-reservation-icon-container{width:60px}.slp-responsive-layout .slope-reservation-section-container,.slp-responsive-layout .slope-reservation-section-container.slope-submit-section{width:50%}.slp-responsive-layout .slope-guests-count-container{text-align:left}}
    22#slope-promotions a.slp-button{padding:1.5rem .5rem;transition:all .2s ease-in-out;text-decoration:none}#slope-promotions a.slp-button:hover{opacity:.7}#slope-widget{font-family:inherit!important}table.slp{min-width:initial;font-family:inherit}table.slp td{font-family:inherit;text-align:left!important;word-break:normal}[id^=promotion-submit-].slp-button{font-family:inherit!important;font-weight:700;letter-spacing:inherit}
    33@keyframes slope-spin{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}.slope-promo-container{width:100%!important}#slp-arrow-icon{height:1rem}#slp-settings-border-radius-container{display:flex;gap:10px;align-items:center}.slp-promotion-card{flex:1 1 300px;border-radius:10px;margin-bottom:1rem;position:relative;min-width:280px;display:flex;flex-direction:column}.slp-loading-spinner{width:40px;height:40px;border:4px solid #f3f3f3;border-top:4px solid #3498db;border-radius:50%;animation:slope-spin 2s linear infinite}.slp-error-message,.slp-loading-indicator{display:flex;justify-content:center;align-items:center;margin:auto}.slp-loading-indicator{padding:20px;width:100%}.slp-error-message{border-radius:10px;background:#eee;padding:30px;text-align:center}.slp-promotion-container{flex:1;display:flex;flex-direction:column;width:fit-content;max-width:100%;overflow:hidden}.slp-promotion-image{background-size:cover;background-repeat:no-repeat;background-position:center;padding:16px;min-height:180px}.slp-promotion-expiration-date{top:1rem;left:1rem;z-index:2;padding:4px 8px;border-radius:10px;font-size:.75rem;font-weight:700;width:fit-content}.slp-promotion-title{font-size:clamp(1rem,2.5vw,1.25rem);font-weight:700;line-height:1.3;margin-bottom:clamp(.5rem,2vw,1rem)}.slp-promotion-description{font-size:clamp(.875rem,2vw,1rem);line-height:1.5;-webkit-box-orient:vertical;white-space:normal;display:-webkit-box;overflow:hidden;text-overflow:ellipsis;max-width:100%;word-wrap:break-word}.slp-promotion-actions{display:flex;flex-direction:column;gap:.5rem;margin-top:auto}.slp-see-details{font-size:.9rem;align-self:flex-start;font-weight:700;display:flex;align-items:center;margin-bottom:.5rem;gap:.5rem}.slp-reserve-button{display:block;padding:.75rem 0;font-size:1rem;font-weight:700;border-radius:10px;text-decoration:none;text-align:center}.slp-modal,.slp-modal-overlay{z-index:1000;top:0;left:0;width:100%;height:100%}.slp-modal{position:fixed;background-color:rgba(0,0,0,.4);opacity:0;visibility:hidden;transition:opacity .3s ease,visibility .3s ease}.slp-modal-overlay{background-image:linear-gradient(to bottom,transparent 0,#d1d2da 250px,#d1d2da,#d1d2da);border-radius:10px;position:absolute}.slp-modal-container{background-size:100%,cover;background-repeat:no-repeat;background-position:top,center;padding:clamp(8px,2vw,12px);border-radius:10px;width:min(80vw,600px);z-index:1001;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.slp-close-modal-button{position:absolute;right:1rem;line-height:.5;top:1rem;font-size:24px;cursor:pointer;z-index:1003;border-radius:50%;padding:.5rem}.slp-modal-promotion-container{border-radius:10px;position:relative;z-index:1001;margin-top:clamp(10vh,16vh,24vh)}.slp-modal-promotion-details{max-width:100%;word-wrap:break-word;max-height:25vh;overflow-y:auto}.slp-modal-lodgings,.slp-modal-promotion-details{font-size:clamp(.875rem,2vw,1rem);margin-bottom:1rem;line-height:1.5}.slp-modal-visible{opacity:1;visibility:visible}.slp-modal-hidden{opacity:0;visibility:hidden}@media screen and (max-width:768px){.slp-modal-promotion-details{max-height:50vh}.slp-modal-container{width:90vw;background-size:150%,cover}}
  • slope-widgets/tags/4.3.3/includes/DBUpgrader.php

    r3289147 r3385288  
    11<?php
    22declare(strict_types=1);
     3
     4namespace SlopeWidgets;
    35
    46class DBUpgrader
  • slope-widgets/tags/4.3.3/includes/admin/GlobalSettings.php

    r3294812 r3385288  
    22declare(strict_types=1);
    33
    4 use validation\rules\Uuid;
    5 use validation\Validator;
     4namespace SlopeWidgets\Admin;
     5
     6use SlopeWidgets\Settings\GlobalSettingsProvider;
     7use SlopeWidgets\Validation\InputSanitizer;
     8use SlopeWidgets\Validation\Rules\Uuid;
     9use SlopeWidgets\Validation\Validator;
    610
    711class GlobalSettings
     
    6973            [new Uuid()],
    7074            __('L\'ID Struttura non è valido.', 'slope-widgets'),
    71             null
     75            // Reuse the existing establishment ID as the default value (if any)
     76            GlobalSettingsProvider::getEstablishmentId()
    7277        );
    7378
    7479        $validatedData = $validator->validate($input);
    75         // NOTE: `book_target` is a checkbox and it is not present in the input if it is not checked. So we need to
     80
     81        // WARNING: Only validated data will be saved. Fields not included in the validation or failing validation will
     82        // be omitted. As `book_target` is a checkbox it is not present in the input if it is not checked. So we need to
    7683        // set it to false if it is not present in the input.
    77         // TODO: Maybe we should build a normalizer to ensure that the data stored in the settings is in the correct
    78         //  format (in this case a boolean).
    79         $validatedData['book_target'] = !empty($input['book_target'])
    80             && is_string($input['book_target'])
    81             && trim($input['book_target']) !== '';
     84        $validatedData['book_target'] = InputSanitizer::normalizeCheckbox($input, 'book_target');
    8285
    8386        if ($validator->hasErrors()) {
  • slope-widgets/tags/4.3.3/includes/admin/Promotions.php

    r3294812 r3385288  
    11<?php
    22
    3 use validation\rules\HexColor;
    4 use validation\rules\InArray;
    5 use validation\rules\Range;
    6 use validation\Validator;
     3namespace SlopeWidgets\Admin;
     4
     5use SlopeWidgets\Enums\CardLayout;
     6use SlopeWidgets\Enums\FontWeight;
     7use SlopeWidgets\Enums\TextAlignment;
     8use SlopeWidgets\Helpers\LanguageResolver;
     9use SlopeWidgets\Settings\GlobalSettingsProvider;
     10use SlopeWidgets\Settings\PromotionsSettingsProvider;
     11use SlopeWidgets\Validation\Rules\HexColor;
     12use SlopeWidgets\Validation\Rules\InArray;
     13use SlopeWidgets\Validation\Rules\Range;
     14use SlopeWidgets\Validation\Validator;
     15use SlopeWidgets\Validation\InputSanitizer;
    716
    817class Promotions
     
    181190    {
    182191        include(SLOPE_WIDGETS_PATH . "includes/pages/promotions/partials/style-section.php");
    183         include(SLOPE_WIDGETS_PATH . "includes/pages/promotions/partials//layout-section.php");
     192        include(SLOPE_WIDGETS_PATH . "includes/pages/promotions/partials/layout-section.php");
    184193    }
    185194
     
    296305
    297306        $validatedData = $validator->validate($input);
    298         // TODO: Maybe we should build a normalizer to ensure that the data stored in the settings is in the correct
    299         //  format (in this case a boolean).
    300         // NOTE: `hide_description` is a checkbox and it is not present in the input if it is not checked. So we need to
    301         // set it to false if it is not present in the input.
    302         $validatedData['hide_description'] = !empty($input['hide_description'])
    303             && is_string($input['hide_description'])
    304             && trim($input['hide_description']) !== '';
     307
     308        // WARNING: Only validated data will be saved. Fields not included in the validation or failing validation will
     309        // be omitted. As `hide_description` is a checkbox it is not present in the input if it is not checked.
     310        // So we need to set it to false if it is not present in the input.
     311        $validatedData['hide_description'] = InputSanitizer::normalizeCheckbox($validatedData, 'hide_description');
    305312
    306313        if ($validator->hasErrors()) {
  • slope-widgets/tags/4.3.3/includes/admin/WelcomePage.php

    r3289147 r3385288  
    11<?php
     2declare(strict_types=1);
     3
     4namespace SlopeWidgets\Admin;
    25
    36class WelcomePage
  • slope-widgets/tags/4.3.3/includes/enums/AbstractEnum.php

    r3289147 r3385288  
    11<?php
     2declare(strict_types=1);
     3
     4namespace SlopeWidgets\Enums;
    25
    36/**
  • slope-widgets/tags/4.3.3/includes/enums/CardLayout.php

    r3289147 r3385288  
    11<?php
     2declare(strict_types=1);
     3
     4namespace SlopeWidgets\Enums;
    25
    36final class CardLayout extends AbstractEnum
  • slope-widgets/tags/4.3.3/includes/enums/FontWeight.php

    r2714664 r3385288  
    11<?php
     2declare(strict_types=1);
     3
     4namespace SlopeWidgets\Enums;
    25
    36/**
  • slope-widgets/tags/4.3.3/includes/enums/TextAlignment.php

    r2714664 r3385288  
    11<?php
     2declare(strict_types=1);
     3
     4namespace SlopeWidgets\Enums;
    25
    36/**
  • slope-widgets/tags/4.3.3/includes/helpers/LanguageResolver.php

    r3289147 r3385288  
    11<?php
    22declare(strict_types=1);
     3
     4namespace SlopeWidgets\Helpers;
    35
    46class LanguageResolver
  • slope-widgets/tags/4.3.3/includes/pages/global-settings/partials/form.php

    r3294812 r3385288  
    11<?php
     2use SlopeWidgets\Settings\GlobalSettingsProvider;
     3
    24    $uuid = GlobalSettingsProvider::getEstablishmentId();
    35    $openLinksOnANewTabAttribute = GlobalSettingsProvider::shouldOpenLinksOnANewTab() ? ' checked="checked" ' : '';
  • slope-widgets/tags/4.3.3/includes/pages/promotions/partials/layout-section.php

    r3294812 r3385288  
    11<?php
     2use SlopeWidgets\Settings\PromotionsSettingsProvider;
     3use SlopeWidgets\Enums\CardLayout;
     4
    25$promotionsPerRow = PromotionsSettingsProvider::getNumberOfPromotionsPerRow();
    36?>
  • slope-widgets/tags/4.3.3/includes/pages/promotions/partials/style-section.php

    r3289147 r3385288  
    11<?php
     2use SlopeWidgets\Settings\PromotionsSettingsProvider;
     3use SlopeWidgets\Enums\FontWeight;
     4use SlopeWidgets\Enums\TextAlignment;
     5
    26$borderRadius = PromotionsSettingsProvider::getCardBorderRadius();
    37$radiusOptions = [0, 4, 8, 12, 16, 24];
  • slope-widgets/tags/4.3.3/includes/settings/GlobalSettingsProvider.php

    r3289147 r3385288  
    11<?php
     2declare(strict_types=1);
     3
     4namespace SlopeWidgets\Settings;
    25
    36final class GlobalSettingsProvider
  • slope-widgets/tags/4.3.3/includes/settings/LegacyPromotionsSettingProvider.php

    r3289147 r3385288  
    11<?php
     2
     3namespace SlopeWidgets\Settings;
     4
     5use SlopeWidgets\Enums\FontWeight;
     6use SlopeWidgets\Enums\TextAlignment;
    27
    38/**
  • slope-widgets/tags/4.3.3/includes/settings/PromotionsSettingsProvider.php

    r3289147 r3385288  
    11<?php
     2declare(strict_types=1);
     3
     4namespace SlopeWidgets\Settings;
     5
     6use SlopeWidgets\Enums\CardLayout;
     7use SlopeWidgets\Enums\FontWeight;
     8use SlopeWidgets\Enums\TextAlignment;
    29
    310/**
     
    5360    public static function getCardBorderRadius(): int
    5461    {
    55         return self::get('container_border_radius', self::DEFAULT_CARD_BORDER_RADIUS);
     62        return (int) self::get('container_border_radius', self::DEFAULT_CARD_BORDER_RADIUS);
    5663    }
    5764
     
    8390    public static function getTitleSize(): int
    8491    {
    85         return self::get('title_size', self::DEFAULT_TITLE_SIZE);
     92        return (int) self::get('title_size', self::DEFAULT_TITLE_SIZE);
    8693    }
    8794
    8895    public static function getDescriptionFontSize(): int
    8996    {
    90         return self::get('description_font_size', self::DEFAULT_DESCRIPTION_SIZE);
     97        return (int) self::get('description_font_size', self::DEFAULT_DESCRIPTION_SIZE);
    9198    }
    9299
     
    103110    public static function getNumberOfPromotionsPerRow(): int
    104111    {
    105         return self::get('number_of_promotions_per_row', self::DEFAULT_PROMOTIONS_PER_ROW);
     112        return (int) self::get('number_of_promotions_per_row', self::DEFAULT_PROMOTIONS_PER_ROW);
    106113    }
    107114
    108115    public static function getDescriptionMaxRows(): int
    109116    {
    110         return self::get('description_max_rows', self::DEFAULT_DESCRIPTION_MAX_ROWS);
     117        return (int) self::get('description_max_rows', self::DEFAULT_DESCRIPTION_MAX_ROWS);
    111118    }
    112119
  • slope-widgets/tags/4.3.3/includes/settings/ReservationsSettingsProvider.php

    r3289147 r3385288  
    11<?php
     2
     3namespace SlopeWidgets\Settings;
    24
    35final class ReservationsSettingsProvider
     
    79    const DEFAULT_MINIMUM_SUGGESTED_STAY = '1';
    810    const DEFAULT_MAXIMUM_AGE_FOR_CHILDREN = '13';
     11    const DEFAULT_MINIMUM_AGE_FOR_CHILDREN = '0';
    912    const DEFAULT_CALL_TO_ACTION_BUTTON_ITALIAN_LABEL = 'Prenota ora';
    1013    const DEFAULT_CALL_TO_ACTION_BUTTON_ENGLISH_LABEL = 'Book now';
     
    4245    {
    4346        return self::get('children_age_max', self::DEFAULT_MAXIMUM_AGE_FOR_CHILDREN);
     47    }
     48
     49    public static function getMinimumAgeForChildren()
     50    {
     51        return self::get('children_age_min', self::DEFAULT_MINIMUM_AGE_FOR_CHILDREN);
    4452    }
    4553
  • slope-widgets/tags/4.3.3/js/slope-widgets.js

    r3289147 r3385288  
    77    slopeDateRangePicker.create(".slope-check-in-input", ".slope-check-out-input", widget, index, $).init($);
    88    new SlopeGuestsWrapper($(widget).find(".slope-guests-wrapper")).init($);
    9   }); //Border_radius card Promotions
    10 
    11   var slopeWidgetBorderRadius = $("#slope-widgets-config").data("range_button");
    12 
    13   if (slopeWidgetBorderRadius != "") {
    14     $(".slp-column").css("border-radius:", slopeWidgetBorderRadius);
    15   } //Title size Promotions
    16 
    17 
    18   var slopeWidgetTitleSize = $("#slope-widgets-config").data("title_size");
    19 
    20   if (slopeWidgetTitleSize != "") {
    21     $("p.slp-column").css("font-size:", slopeWidgetTitleSize);
    22   }
     9  });
    2310}); // Packages and promotions
    2411
  • slope-widgets/tags/4.3.3/languages/slope-widgets-en_US.po

    r3289147 r3385288  
    22msgstr ""
    33"Project-Id-Version: Slope Widgets\n"
    4 "POT-Creation-Date: 2025-04-28 14:11+0200\n"
    5 "PO-Revision-Date: 2025-04-28 14:11+0200\n"
     4"POT-Creation-Date: 2025-10-17 16:17+0200\n"
     5"PO-Revision-Date: 2025-10-17 16:17+0200\n"
    66"Last-Translator: \n"
    77"Language-Team: \n"
     
    1111"Content-Transfer-Encoding: 8bit\n"
    1212"Plural-Forms: nplurals=2; plural=(n != 1);\n"
    13 "X-Generator: Poedit 3.6\n"
     13"X-Generator: Poedit 3.8\n"
    1414"X-Poedit-Basepath: ..\n"
    1515"X-Poedit-WPHeader: slope-widgets.php\n"
    1616"X-Poedit-SourceCharset: UTF-8\n"
    17 "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
    18 "esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
    19 "_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
     17"X-Poedit-KeywordsList: "
     18"__;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
    2019"X-Poedit-SearchPath-0: .\n"
    2120"X-Poedit-SearchPathExcluded-0: *.js\n"
    2221
    23 #: includes/admin/GlobalSettings.php:20
     22#: includes/admin/GlobalSettings.php:24
    2423msgid "Impostazioni di Slope Widgets"
    2524msgstr "Slope Widgets Settings"
    2625
    27 #: includes/admin/GlobalSettings.php:66
     26#: includes/admin/GlobalSettings.php:74
    2827msgid "L'ID Struttura non è valido."
    2928msgstr "Invalid Establishment ID."
    3029
    31 #: includes/admin/Promotions.php:78
     30#: includes/admin/Promotions.php:93
    3231msgid "Id Struttura non impostato"
    3332msgstr "Establishment ID not setted"
    3433
    35 #: includes/admin/Promotions.php:189
     34#: includes/admin/Promotions.php:209 includes/admin/Reservations.php:392
    3635msgid "Una delle proprietà non è valida, controllare i valori e riprovare"
    3736msgstr "One of the properties is invalid, check the values ​​and try again"
    3837
    3938#: includes/pages/global-settings/index.php:14
    40 #: includes/pages/promotions/index.php:35 slope-promotions-legacy.php:262
    41 #: slope-reservations.php:34
     39#: includes/pages/promotions/index.php:35
     40#: includes/pages/reservations/index.php:21 slope-promotions-legacy.php:268
    4241msgid "Salva modifiche"
    4342msgstr "Save Changes"
    4443
    45 #: includes/pages/global-settings/partials/form.php:8
     44#: includes/pages/global-settings/partials/form.php:10
    4645msgid ""
    4746"Slope Widgets funziona con gli shortcode. Se non sai cosa sono e come "
     
    5150"how they work, check out the"
    5251
    53 #: includes/pages/global-settings/partials/form.php:8
     52#: includes/pages/global-settings/partials/form.php:10
    5453msgid "documentazione"
    5554msgstr "documentation"
    5655
    57 #: includes/pages/global-settings/partials/form.php:8
     56#: includes/pages/global-settings/partials/form.php:10
    5857msgid "di WordPress."
    5958msgstr "of WordPress."
    6059
    61 #: includes/pages/global-settings/partials/form.php:11
     60#: includes/pages/global-settings/partials/form.php:13
    6261msgid ""
    6362"Se il sito web della tua struttura è multilingua e preferisci mostrare il "
     
    7170"pages."
    7271
    73 #: includes/pages/global-settings/partials/form.php:14
     72#: includes/pages/global-settings/partials/form.php:16
    7473msgid ""
    7574"Le lingue supportate dalla barra delle prenotazioni sono italiano, inglese, "
     
    7978"German (it, en, fr, de)."
    8079
    81 #: includes/pages/global-settings/partials/form.php:17
     80#: includes/pages/global-settings/partials/form.php:19
    8281msgid "Shortcode supportati:"
    8382msgstr "Supported shortcodes:"
    8483
    85 #: includes/pages/global-settings/partials/form.php:20
     84#: includes/pages/global-settings/partials/form.php:22
    8685msgid ""
    8786"mostra widget e booking engine in base alla lingua del browser del "
     
    9190"English if the language is not supported."
    9291
    93 #: includes/pages/global-settings/partials/form.php:21
     92#: includes/pages/global-settings/partials/form.php:23
    9493msgid "mostra widget e booking engine sempre in inglese."
    9594msgstr "shows widget and booking engine always in English."
    9695
    97 #: includes/pages/global-settings/partials/form.php:22
     96#: includes/pages/global-settings/partials/form.php:24
    9897msgid "mostra widget e booking engine sempre in italiano."
    9998msgstr "shows widget and booking engine always in Italian."
    10099
    101 #: includes/pages/global-settings/partials/form.php:23
     100#: includes/pages/global-settings/partials/form.php:25
    102101msgid "mostra widget e booking engine sempre in francese."
    103102msgstr "shows widget and booking engine always in French."
    104103
    105 #: includes/pages/global-settings/partials/form.php:24
     104#: includes/pages/global-settings/partials/form.php:26
    106105msgid "mostra widget e booking engine sempre in tedesco."
    107106msgstr "shows widget and booking engine always in German."
    108107
    109 #: includes/pages/global-settings/partials/form.php:25
     108#: includes/pages/global-settings/partials/form.php:27
    110109msgid ""
    111110"mostra le promozioni in base alla lingua del browser del visitatore, o in "
     
    115114"English if the language is not supported."
    116115
    117 #: includes/pages/global-settings/partials/form.php:26
     116#: includes/pages/global-settings/partials/form.php:28
    118117msgid "mostra le promozioni sempre in inglese."
    119118msgstr "displays promotions always in English."
    120119
    121 #: includes/pages/global-settings/partials/form.php:27
     120#: includes/pages/global-settings/partials/form.php:29
    122121msgid "mostra le promozioni sempre in italiano."
    123122msgstr "displays promotions always in Italian."
    124123
    125 #: includes/pages/global-settings/partials/form.php:28
     124#: includes/pages/global-settings/partials/form.php:30
    126125msgid "mostra le promozioni sempre in francese."
    127126msgstr "displays promotions always in French."
    128127
    129 #: includes/pages/global-settings/partials/form.php:29
     128#: includes/pages/global-settings/partials/form.php:31
    130129msgid "mostra le promozioni sempre in tedesco."
    131130msgstr "displays promotions always in German."
    132131
    133 #: includes/pages/global-settings/partials/form.php:35
     132#: includes/pages/global-settings/partials/form.php:37
    134133msgid "Impostazioni Generali"
    135134msgstr "Settings"
    136135
    137 #: includes/pages/global-settings/partials/form.php:38
     136#: includes/pages/global-settings/partials/form.php:40
    138137msgid "ID Struttura Slope"
    139138msgstr "Slope Structure ID"
    140139
    141 #: includes/pages/global-settings/partials/form.php:44
     140#: includes/pages/global-settings/partials/form.php:46
    142141msgid "Inserisci qui l'identificativo della tua struttura"
    143142msgstr "Please enter your structure ID here"
    144143
    145 #: includes/pages/global-settings/partials/form.php:46
     144#: includes/pages/global-settings/partials/form.php:48
    146145msgid "Hai acquistato Slope ma non hai ancora l'ID?"
    147146msgstr "Did you buy Slope but didn’t receive the ID?"
    148147
    149 #: includes/pages/global-settings/partials/form.php:47
     148#: includes/pages/global-settings/partials/form.php:49
    150149msgid "Richiesta ID Struttura da Slope Widgets WP Plugin"
    151150msgstr "Hotel UUID Request from Slope Widgets WP Plugin"
    152151
    153 #: includes/pages/global-settings/partials/form.php:48
     152#: includes/pages/global-settings/partials/form.php:50
    154153msgid "Richiedilo ora"
    155154msgstr "Ask for it now"
    156155
    157 #: includes/pages/global-settings/partials/form.php:53
     156#: includes/pages/global-settings/partials/form.php:55
    158157msgid "Apri il booking engine in una nuova scheda"
    159158msgstr "Open the Booking Engine in a new tab"
    160159
    161 #: includes/pages/global-settings/partials/form.php:58
     160#: includes/pages/global-settings/partials/form.php:64
    162161msgid ""
    163162"Selezionando questa casella, il booking engine verrà aperto in una nuova "
     
    170169msgstr "Customize the new Slope promotions widget. Use the "
    171170
    172 #: includes/pages/promotions/index.php:12 slope-promotions-legacy.php:25
    173 #: slope-reservations.php:21
     171#: includes/pages/promotions/index.php:12
     172#: includes/pages/reservations/index.php:8 slope-promotions-legacy.php:31
    174173msgid "per inserirlo dove vuoi!"
    175174msgstr "to insert it into pages!"
    176175
    177 #: includes/pages/promotions/index.php:16 slope-promotions-legacy.php:27
    178 #: slope-reservations.php:24
     176#: includes/pages/promotions/index.php:16
     177#: includes/pages/reservations/index.php:11 slope-promotions-legacy.php:33
    179178msgid "Per modificare il tuo ID struttura "
    180179msgstr "To change your structure ID "
    181180
    182 #: includes/pages/promotions/index.php:17 slope-promotions-legacy.php:27
    183 #: slope-reservations.php:25
     181#: includes/pages/promotions/index.php:17
     182#: includes/pages/reservations/index.php:12 slope-promotions-legacy.php:33
    184183msgid "clicca qui"
    185184msgstr "click here"
    186185
    187 #: includes/pages/promotions/index.php:25 slope-promotions-legacy.php:252
     186#: includes/pages/promotions/index.php:25 slope-promotions-legacy.php:258
    188187msgid "Stile"
    189188msgstr "Style"
    190189
    191190#: includes/pages/promotions/index.php:28
    192 #: includes/pages/promotions/partials/layout-section.php:11
    193 #: slope-promotions-legacy.php:255
     191#: includes/pages/promotions/partials/layout-section.php:14
     192#: slope-promotions-legacy.php:261
    194193msgid "Layout"
    195194msgstr "Layout"
    196195
    197 #: includes/pages/promotions/partials/layout-section.php:16
     196#: includes/pages/promotions/partials/layout-section.php:19
    198197msgid "Orientamento scheda"
    199198msgstr "Card orientation"
    200199
    201 #: includes/pages/promotions/partials/layout-section.php:23
     200#: includes/pages/promotions/partials/layout-section.php:26
    202201msgid "Orizzontale"
    203202msgstr "Horizontal"
    204203
    205 #: includes/pages/promotions/partials/layout-section.php:24
     204#: includes/pages/promotions/partials/layout-section.php:27
    206205msgid "Verticale"
    207206msgstr "Vertical"
    208207
    209 #: includes/pages/promotions/partials/layout-section.php:39
     208#: includes/pages/promotions/partials/layout-section.php:42
    210209msgid "Numero di promozioni per riga"
    211210msgstr "Number of promotions per line"
    212211
    213 #: includes/pages/promotions/partials/layout-section.php:70
     212#: includes/pages/promotions/partials/layout-section.php:78
    214213msgid ""
    215214"Specifica il numero di promozioni massime da mostrare in ogni riga in schermi "
     
    221220"columns per row."
    222221
    223 #: includes/pages/promotions/partials/layout-section.php:82
     222#: includes/pages/promotions/partials/layout-section.php:90
    224223msgid "Descrizioni"
    225224msgstr "Descriptions"
    226225
    227 #: includes/pages/promotions/partials/layout-section.php:87
    228 #: slope-promotions-legacy.php:40
     226#: includes/pages/promotions/partials/layout-section.php:95
     227#: slope-promotions-legacy.php:46
    229228msgid "Nascondi descrizione delle promozioni"
    230229msgstr "Hide promotions description"
    231230
    232 #: includes/pages/promotions/partials/layout-section.php:96
     231#: includes/pages/promotions/partials/layout-section.php:105
    233232msgid "Massimo di righe per la descrizione delle promozioni"
    234233msgstr "Maximum number of lines for promotion description"
    235234
    236 #: includes/pages/promotions/partials/promotionsList.ajax.php:8
     235#: includes/pages/promotions/partials/promotionsList.ajax.php:10
    237236msgid "Non sono presenti promozioni disponibili."
    238237msgstr "No promotions available."
    239238
    240 #: includes/pages/promotions/partials/style-section.php:13
    241 #: slope-promotions-legacy.php:145
     239#: includes/pages/promotions/partials/style-section.php:17
     240#: slope-promotions-legacy.php:151
    242241msgid "Sinistra"
    243242msgstr "Left"
    244243
    245 #: includes/pages/promotions/partials/style-section.php:14
    246 #: slope-promotions-legacy.php:146
     244#: includes/pages/promotions/partials/style-section.php:18
     245#: slope-promotions-legacy.php:152
    247246msgid "Centro"
    248247msgstr "Center"
    249248
    250 #: includes/pages/promotions/partials/style-section.php:15
    251 #: slope-promotions-legacy.php:147
     249#: includes/pages/promotions/partials/style-section.php:19
     250#: slope-promotions-legacy.php:153
    252251msgid "Destra"
    253252msgstr "Right"
    254253
    255 #: includes/pages/promotions/partials/style-section.php:20
    256 #: slope-promotions-legacy.php:124 slope-promotions-legacy.php:184
     254#: includes/pages/promotions/partials/style-section.php:24
     255#: slope-promotions-legacy.php:130 slope-promotions-legacy.php:190
    257256msgid "Leggero"
    258257msgstr "Light"
    259258
    260 #: includes/pages/promotions/partials/style-section.php:21
    261 #: slope-promotions-legacy.php:125 slope-promotions-legacy.php:185
     259#: includes/pages/promotions/partials/style-section.php:25
     260#: slope-promotions-legacy.php:131 slope-promotions-legacy.php:191
    262261msgid "Normale"
    263262msgstr "Regular"
    264263
    265 #: includes/pages/promotions/partials/style-section.php:22
    266 #: slope-promotions-legacy.php:126 slope-promotions-legacy.php:186
     264#: includes/pages/promotions/partials/style-section.php:26
     265#: slope-promotions-legacy.php:132 slope-promotions-legacy.php:192
    267266msgid "Medio"
    268267msgstr "Medium"
    269268
    270 #: includes/pages/promotions/partials/style-section.php:23
    271 #: slope-promotions-legacy.php:127 slope-promotions-legacy.php:187
     269#: includes/pages/promotions/partials/style-section.php:27
     270#: slope-promotions-legacy.php:133 slope-promotions-legacy.php:193
    272271msgid "Grassetto Leggero"
    273272msgstr "Semi-Bold"
    274273
    275 #: includes/pages/promotions/partials/style-section.php:24
    276 #: slope-promotions-legacy.php:128 slope-promotions-legacy.php:188
     274#: includes/pages/promotions/partials/style-section.php:28
     275#: slope-promotions-legacy.php:134 slope-promotions-legacy.php:194
    277276msgid "Grassetto"
    278277msgstr "Bold"
    279278
    280 #: includes/pages/promotions/partials/style-section.php:38
     279#: includes/pages/promotions/partials/style-section.php:42
    281280msgid "Contenitore"
    282281msgstr "Container"
    283282
    284 #: includes/pages/promotions/partials/style-section.php:43
    285 #: slope-promotions-legacy.php:65
     283#: includes/pages/promotions/partials/style-section.php:47
     284#: slope-promotions-legacy.php:71
    286285msgid "Colore dello sfondo"
    287286msgstr "Background color"
    288287
    289 #: includes/pages/promotions/partials/style-section.php:51
    290 #: slope-promotions-legacy.php:92
     288#: includes/pages/promotions/partials/style-section.php:55
     289#: slope-promotions-legacy.php:98
    291290msgid "Raggio dei bordi"
    292291msgstr "Border radius"
    293292
    294 #: includes/pages/promotions/partials/style-section.php:67
     293#: includes/pages/promotions/partials/style-section.php:71
    295294msgid ""
    296295"Seleziona il raggio di arrotondamento degli angoli delle schede promozioni. "
     
    300299"radius, the more rounded the corners will be."
    301300
    302 #: includes/pages/promotions/partials/style-section.php:78
     301#: includes/pages/promotions/partials/style-section.php:82
    303302msgid "Titolo"
    304303msgstr "Title"
    305304
    306 #: includes/pages/promotions/partials/style-section.php:84
    307 #: includes/pages/promotions/partials/style-section.php:159
    308 #: includes/pages/promotions/partials/style-section.php:243
    309 #: includes/sections/slope-reservations/settings-section.php:67
    310 #: slope-promotions-legacy.php:104 slope-promotions-legacy.php:174
    311 #: slope-promotions-legacy.php:206
     305#: includes/pages/promotions/partials/style-section.php:88
     306#: includes/pages/promotions/partials/style-section.php:163
     307#: includes/pages/promotions/partials/style-section.php:249
     308#: includes/pages/reservations/partials/form.php:68
     309#: slope-promotions-legacy.php:110 slope-promotions-legacy.php:180
     310#: slope-promotions-legacy.php:212
    312311msgid "Colore del testo"
    313312msgstr "Text color"
    314313
    315 #: includes/pages/promotions/partials/style-section.php:94
    316 #: includes/pages/promotions/partials/style-section.php:169
    317 #: slope-promotions-legacy.php:113
     314#: includes/pages/promotions/partials/style-section.php:98
     315#: includes/pages/promotions/partials/style-section.php:173
     316#: slope-promotions-legacy.php:119
    318317msgid "Dimensione del testo"
    319318msgstr "Text size"
    320319
    321 #: includes/pages/promotions/partials/style-section.php:111
    322 #: includes/pages/promotions/partials/style-section.php:186
    323 #: includes/pages/promotions/partials/style-section.php:253
     320#: includes/pages/promotions/partials/style-section.php:115
     321#: includes/pages/promotions/partials/style-section.php:190
     322#: includes/pages/promotions/partials/style-section.php:259
    324323msgid "Peso del testo"
    325324msgstr "Text weight"
    326325
    327 #: includes/pages/promotions/partials/style-section.php:129
     326#: includes/pages/promotions/partials/style-section.php:133
    328327msgid "Allineamento del titolo"
    329328msgstr "Title alignment"
    330329
    331 #: includes/pages/promotions/partials/style-section.php:152
     330#: includes/pages/promotions/partials/style-section.php:156
    332331msgid "Descrizione"
    333332msgstr "Description"
    334333
    335 #: includes/pages/promotions/partials/style-section.php:204
    336 #: slope-promotions-legacy.php:149
     334#: includes/pages/promotions/partials/style-section.php:208
     335#: slope-promotions-legacy.php:155
    337336msgid "Allineamento del testo"
    338337msgstr "Text alignment"
    339338
    340 #: includes/pages/promotions/partials/style-section.php:225
    341 #: includes/sections/slope-reservations/settings-section.php:20
     339#: includes/pages/promotions/partials/style-section.php:231
     340#: includes/pages/reservations/partials/form.php:21
    342341msgid "Pulsante"
    343342msgstr "Button"
    344343
    345 #: includes/pages/promotions/partials/style-section.php:232
    346 #: includes/sections/slope-reservations/settings-section.php:58
    347 #: slope-promotions-legacy.php:165
     344#: includes/pages/promotions/partials/style-section.php:238
     345#: includes/pages/reservations/partials/form.php:59
     346#: slope-promotions-legacy.php:171
    348347msgid "Colore di sfondo"
    349348msgstr "Background color"
     349
     350#: includes/pages/reservations/index.php:6
     351msgid "Personalizza il widget di prenotazione di Slope. Usa lo "
     352msgstr "Customize the Slope reservations widget. Use the "
     353
     354#: includes/pages/reservations/partials/form.php:24
     355msgid "Testo del pulsante in italiano"
     356msgstr "Button label in Italian"
     357
     358#: includes/pages/reservations/partials/form.php:27
     359msgid "Es: Prenota"
     360msgstr "Eg: Prenota"
     361
     362#: includes/pages/reservations/partials/form.php:30
     363msgid "Testo del pulsante in inglese"
     364msgstr "Button label in English"
     365
     366#: includes/pages/reservations/partials/form.php:32
     367msgid "Es: Book now"
     368msgstr "Eg: Book now"
     369
     370#: includes/pages/reservations/partials/form.php:35
     371msgid "Testo del pulsante in francese"
     372msgstr "Button label in French"
     373
     374#: includes/pages/reservations/partials/form.php:37
     375msgid "Es: Réserver"
     376msgstr "Eg: Réserver"
     377
     378#: includes/pages/reservations/partials/form.php:40
     379msgid "Testo del pulsante in tedesco"
     380msgstr "Button label in German"
     381
     382#: includes/pages/reservations/partials/form.php:42
     383msgid "Es: Buchen"
     384msgstr "Eg: Buchen"
     385
     386#: includes/pages/reservations/partials/form.php:45
     387msgid "Testo del pulsante in grassetto"
     388msgstr "Bold button text"
     389
     390#: includes/pages/reservations/partials/form.php:54
     391msgid "Aspetto"
     392msgstr "Style"
     393
     394#: includes/pages/reservations/partials/form.php:74
     395msgid "Mostra selezione bambini"
     396msgstr "Show children select field"
     397
     398#: includes/pages/reservations/partials/form.php:79
     399msgid "Visualizza il widget su due righe"
     400msgstr "Display the widget on two rows"
     401
     402#: includes/pages/reservations/partials/form.php:90
     403msgid "Filtri"
     404msgstr "Filters"
     405
     406#: includes/pages/reservations/partials/form.php:93
     407msgid "Età minima dei bambini (in anni)"
     408msgstr "Minimum children age (years)"
     409
     410#: includes/pages/reservations/partials/form.php:95
     411msgid "Es: 0"
     412msgstr "Eg: 0"
     413
     414#: includes/pages/reservations/partials/form.php:98
     415msgid "Età massima dei bambini (in anni)"
     416msgstr "Maximum children age (years)"
     417
     418#: includes/pages/reservations/partials/form.php:100
     419msgid "Es: 12"
     420msgstr "Eg: 12"
     421
     422#: includes/pages/reservations/partials/form.php:103
     423msgid "Soggiorno minimo suggerito"
     424msgstr "Minimum stay suggested"
     425
     426#: includes/pages/reservations/partials/form.php:105
     427msgid "Es: 3"
     428msgstr "Eg: 3"
    350429
    351430#: includes/pages/welcome/index.php:6
     
    404483msgstr "Submit"
    405484
    406 #: includes/sections/slope-reservations/settings-section.php:23
    407 msgid "Testo del pulsante in italiano"
    408 msgstr "Button label in Italian"
    409 
    410 #: includes/sections/slope-reservations/settings-section.php:26
    411 msgid "Es: Prenota"
    412 msgstr "Eg: Prenota"
    413 
    414 #: includes/sections/slope-reservations/settings-section.php:29
    415 msgid "Testo del pulsante in inglese"
    416 msgstr "Button label in English"
    417 
    418 #: includes/sections/slope-reservations/settings-section.php:31
    419 msgid "Es: Book now"
    420 msgstr "Eg: Book now"
    421 
    422 #: includes/sections/slope-reservations/settings-section.php:34
    423 msgid "Testo del pulsante in francese"
    424 msgstr "Button label in French"
    425 
    426 #: includes/sections/slope-reservations/settings-section.php:36
    427 msgid "Es: Réserver"
    428 msgstr "Eg: Réserver"
    429 
    430 #: includes/sections/slope-reservations/settings-section.php:39
    431 msgid "Testo del pulsante in tedesco"
    432 msgstr "Button label in German"
    433 
    434 #: includes/sections/slope-reservations/settings-section.php:41
    435 msgid "Es: Buchen"
    436 msgstr "Eg: Buchen"
    437 
    438 #: includes/sections/slope-reservations/settings-section.php:44
    439 msgid "Testo del pulsante in grassetto"
    440 msgstr "Bold button text"
    441 
    442 #: includes/sections/slope-reservations/settings-section.php:53
    443 msgid "Aspetto"
    444 msgstr "Style"
    445 
    446 #: includes/sections/slope-reservations/settings-section.php:73
    447 msgid "Mostra selezione bambini"
    448 msgstr "Show children select field"
    449 
    450 #: includes/sections/slope-reservations/settings-section.php:78
    451 msgid "Visualizza il widget su due righe"
    452 msgstr "Display the widget on two rows"
    453 
    454 #: includes/sections/slope-reservations/settings-section.php:89
    455 msgid "Filtri"
    456 msgstr "Filters"
    457 
    458 #: includes/sections/slope-reservations/settings-section.php:92
    459 msgid "Età massima dei bambini (in anni)"
    460 msgstr "Maximum children age (years)"
    461 
    462 #: includes/sections/slope-reservations/settings-section.php:94
    463 msgid "Es: 12"
    464 msgstr "Eg: 12"
    465 
    466 #: includes/sections/slope-reservations/settings-section.php:97
    467 msgid "Soggiorno minimo suggerito"
    468 msgstr "Minimum stay suggested"
    469 
    470 #: includes/sections/slope-reservations/settings-section.php:99
    471 msgid "Es: 3"
    472 msgstr "Eg: 3"
    473 
    474 #: slope-promotions-legacy.php:20
     485#: slope-promotions-legacy.php:26
    475486msgid ""
    476487"Attenzione: Questo widget per le promozioni verrà sostituito in una versione "
     
    481492"recommend using the new Slope promotions widget."
    482493
    483 #: slope-promotions-legacy.php:25
     494#: slope-promotions-legacy.php:31
    484495msgid "Personalizza il widget delle promozioni di Slope. Usa lo "
    485496msgstr "Customize the Slope promotions widget. Just use "
    486497
    487 #: slope-promotions-legacy.php:31
     498#: slope-promotions-legacy.php:37
    488499msgid "ID struttura"
    489500msgstr "Hotel ID"
    490501
    491 #: slope-promotions-legacy.php:33
     502#: slope-promotions-legacy.php:39
    492503msgid "Il tuo Slope ID"
    493504msgstr "Your Slope hotel ID"
    494505
    495 #: slope-promotions-legacy.php:49
     506#: slope-promotions-legacy.php:55
    496507msgid "Nascondi informazioni delle promozioni"
    497508msgstr "Hide promotions information"
    498509
    499 #: slope-promotions-legacy.php:63
     510#: slope-promotions-legacy.php:69
    500511msgid "SCHEDA"
    501512msgstr "CARD"
    502513
    503 #: slope-promotions-legacy.php:74
     514#: slope-promotions-legacy.php:80
    504515msgid "Spessore dei bordi"
    505516msgstr "Border size"
    506517
    507 #: slope-promotions-legacy.php:83
     518#: slope-promotions-legacy.php:89
    508519msgid "Colore dei bordi"
    509520msgstr "Border color"
    510521
    511 #: slope-promotions-legacy.php:102
     522#: slope-promotions-legacy.php:108
    512523msgid "TITOLO"
    513524msgstr "TITLE"
    514525
    515 #: slope-promotions-legacy.php:130 slope-promotions-legacy.php:190
     526#: slope-promotions-legacy.php:136 slope-promotions-legacy.php:196
    516527msgid "Peso del font"
    517528msgstr "Font weight"
    518529
    519 #: slope-promotions-legacy.php:163
     530#: slope-promotions-legacy.php:169
    520531msgid "PULSANTE"
    521532msgstr "BUTTON"
    522533
    523 #: slope-promotions-legacy.php:204
     534#: slope-promotions-legacy.php:210
    524535msgid "TESTO"
    525536msgstr "TEXT"
    526537
    527 #: slope-promotions-legacy.php:225
     538#: slope-promotions-legacy.php:231
    528539msgid "Numero di schede da mostrare per riga"
    529540msgstr "Cards to show in a row"
    530541
    531 #: slope-promotions-legacy.php:249
     542#: slope-promotions-legacy.php:255
    532543msgid "Impostazioni"
    533544msgstr "Settings"
    534545
    535 #: slope-reservations.php:19
    536 msgid "Personalizza il widget di prenotazione di Slope. Usa lo "
    537 msgstr "Customize the Slope reservations widget. Use the "
    538 
    539 #: slope-widgets.php:212
     546#: slope-widgets.php:196
    540547msgid "Settings"
    541548msgstr "Settings"
  • slope-widgets/tags/4.3.3/languages/slope-widgets.pot

    r3289147 r3385288  
    33msgstr ""
    44"Project-Id-Version: Slope Widgets\n"
    5 "POT-Creation-Date: 2025-04-28 14:11+0200\n"
     5"POT-Creation-Date: 2025-10-17 16:17+0200\n"
    66"PO-Revision-Date: 2018-01-04 14:50+0100\n"
    77"Last-Translator: \n"
     
    1111"Content-Transfer-Encoding: 8bit\n"
    1212"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
    13 "X-Generator: Poedit 3.6\n"
     13"X-Generator: Poedit 3.8\n"
    1414"X-Poedit-Basepath: ..\n"
    1515"X-Poedit-WPHeader: slope-widgets.php\n"
     
    1919"X-Poedit-SearchPathExcluded-0: *.js\n"
    2020
    21 #: includes/admin/GlobalSettings.php:20
     21#: includes/admin/GlobalSettings.php:24
    2222msgid "Impostazioni di Slope Widgets"
    2323msgstr ""
    2424
    25 #: includes/admin/GlobalSettings.php:66
     25#: includes/admin/GlobalSettings.php:74
    2626msgid "L'ID Struttura non è valido."
    2727msgstr ""
    2828
    29 #: includes/admin/Promotions.php:78
     29#: includes/admin/Promotions.php:93
    3030msgid "Id Struttura non impostato"
    3131msgstr ""
    3232
    33 #: includes/admin/Promotions.php:189
     33#: includes/admin/Promotions.php:209 includes/admin/Reservations.php:392
    3434msgid "Una delle proprietà non è valida, controllare i valori e riprovare"
    3535msgstr ""
    3636
    3737#: includes/pages/global-settings/index.php:14
    38 #: includes/pages/promotions/index.php:35 slope-promotions-legacy.php:262
    39 #: slope-reservations.php:34
     38#: includes/pages/promotions/index.php:35
     39#: includes/pages/reservations/index.php:21 slope-promotions-legacy.php:268
    4040msgid "Salva modifiche"
    4141msgstr ""
    4242
    43 #: includes/pages/global-settings/partials/form.php:8
     43#: includes/pages/global-settings/partials/form.php:10
    4444msgid "Slope Widgets funziona con gli shortcode. Se non sai cosa sono e come funzionano, consulta la"
    4545msgstr ""
    4646
    47 #: includes/pages/global-settings/partials/form.php:8
     47#: includes/pages/global-settings/partials/form.php:10
    4848msgid "documentazione"
    4949msgstr ""
    5050
    51 #: includes/pages/global-settings/partials/form.php:8
     51#: includes/pages/global-settings/partials/form.php:10
    5252msgid "di WordPress."
    5353msgstr ""
    5454
    55 #: includes/pages/global-settings/partials/form.php:11
     55#: includes/pages/global-settings/partials/form.php:13
    5656msgid "Se il sito web della tua struttura è multilingua e preferisci mostrare il widget di prenotazione e il booking engine in un'altra lingua, aggiungi il parametro opzionale lang allo shortcode che inserirai nelle pagine del sito tradotte."
    5757msgstr ""
    5858
    59 #: includes/pages/global-settings/partials/form.php:14
     59#: includes/pages/global-settings/partials/form.php:16
    6060msgid "Le lingue supportate dalla barra delle prenotazioni sono italiano, inglese, francese e tedesco (it, en, fr, de)."
    6161msgstr ""
    6262
    63 #: includes/pages/global-settings/partials/form.php:17
     63#: includes/pages/global-settings/partials/form.php:19
    6464msgid "Shortcode supportati:"
    6565msgstr ""
    6666
    67 #: includes/pages/global-settings/partials/form.php:20
     67#: includes/pages/global-settings/partials/form.php:22
    6868msgid "mostra widget e booking engine in base alla lingua del browser del visitatore, o in inglese se la lingua non è supportata."
    6969msgstr ""
    7070
    71 #: includes/pages/global-settings/partials/form.php:21
     71#: includes/pages/global-settings/partials/form.php:23
    7272msgid "mostra widget e booking engine sempre in inglese."
    7373msgstr ""
    7474
    75 #: includes/pages/global-settings/partials/form.php:22
     75#: includes/pages/global-settings/partials/form.php:24
    7676msgid "mostra widget e booking engine sempre in italiano."
    7777msgstr ""
    7878
    79 #: includes/pages/global-settings/partials/form.php:23
     79#: includes/pages/global-settings/partials/form.php:25
    8080msgid "mostra widget e booking engine sempre in francese."
    8181msgstr ""
    8282
    83 #: includes/pages/global-settings/partials/form.php:24
     83#: includes/pages/global-settings/partials/form.php:26
    8484msgid "mostra widget e booking engine sempre in tedesco."
    8585msgstr ""
    8686
    87 #: includes/pages/global-settings/partials/form.php:25
     87#: includes/pages/global-settings/partials/form.php:27
    8888msgid "mostra le promozioni in base alla lingua del browser del visitatore, o in inglese se la lingua non è supportata."
    8989msgstr ""
    9090
    91 #: includes/pages/global-settings/partials/form.php:26
     91#: includes/pages/global-settings/partials/form.php:28
    9292msgid "mostra le promozioni sempre in inglese."
    9393msgstr ""
    9494
    95 #: includes/pages/global-settings/partials/form.php:27
     95#: includes/pages/global-settings/partials/form.php:29
    9696msgid "mostra le promozioni sempre in italiano."
    9797msgstr ""
    9898
    99 #: includes/pages/global-settings/partials/form.php:28
     99#: includes/pages/global-settings/partials/form.php:30
    100100msgid "mostra le promozioni sempre in francese."
    101101msgstr ""
    102102
    103 #: includes/pages/global-settings/partials/form.php:29
     103#: includes/pages/global-settings/partials/form.php:31
    104104msgid "mostra le promozioni sempre in tedesco."
    105105msgstr ""
    106106
    107 #: includes/pages/global-settings/partials/form.php:35
     107#: includes/pages/global-settings/partials/form.php:37
    108108msgid "Impostazioni Generali"
    109109msgstr ""
    110110
    111 #: includes/pages/global-settings/partials/form.php:38
     111#: includes/pages/global-settings/partials/form.php:40
    112112msgid "ID Struttura Slope"
    113113msgstr ""
    114114
    115 #: includes/pages/global-settings/partials/form.php:44
     115#: includes/pages/global-settings/partials/form.php:46
    116116msgid "Inserisci qui l'identificativo della tua struttura"
    117117msgstr ""
    118118
    119 #: includes/pages/global-settings/partials/form.php:46
     119#: includes/pages/global-settings/partials/form.php:48
    120120msgid "Hai acquistato Slope ma non hai ancora l'ID?"
    121121msgstr ""
    122122
    123 #: includes/pages/global-settings/partials/form.php:47
     123#: includes/pages/global-settings/partials/form.php:49
    124124msgid "Richiesta ID Struttura da Slope Widgets WP Plugin"
    125125msgstr ""
    126126
    127 #: includes/pages/global-settings/partials/form.php:48
     127#: includes/pages/global-settings/partials/form.php:50
    128128msgid "Richiedilo ora"
    129129msgstr ""
    130130
    131 #: includes/pages/global-settings/partials/form.php:53
     131#: includes/pages/global-settings/partials/form.php:55
    132132msgid "Apri il booking engine in una nuova scheda"
    133133msgstr ""
    134134
    135 #: includes/pages/global-settings/partials/form.php:58
     135#: includes/pages/global-settings/partials/form.php:64
    136136msgid "Selezionando questa casella, il booking engine verrà aperto in una nuova scheda del browser."
    137137msgstr ""
     
    141141msgstr ""
    142142
    143 #: includes/pages/promotions/index.php:12 slope-promotions-legacy.php:25
    144 #: slope-reservations.php:21
     143#: includes/pages/promotions/index.php:12
     144#: includes/pages/reservations/index.php:8 slope-promotions-legacy.php:31
    145145msgid "per inserirlo dove vuoi!"
    146146msgstr ""
    147147
    148 #: includes/pages/promotions/index.php:16 slope-promotions-legacy.php:27
    149 #: slope-reservations.php:24
     148#: includes/pages/promotions/index.php:16
     149#: includes/pages/reservations/index.php:11 slope-promotions-legacy.php:33
    150150msgid "Per modificare il tuo ID struttura "
    151151msgstr ""
    152152
    153 #: includes/pages/promotions/index.php:17 slope-promotions-legacy.php:27
    154 #: slope-reservations.php:25
     153#: includes/pages/promotions/index.php:17
     154#: includes/pages/reservations/index.php:12 slope-promotions-legacy.php:33
    155155msgid "clicca qui"
    156156msgstr ""
    157157
    158 #: includes/pages/promotions/index.php:25 slope-promotions-legacy.php:252
     158#: includes/pages/promotions/index.php:25 slope-promotions-legacy.php:258
    159159msgid "Stile"
    160160msgstr ""
    161161
    162162#: includes/pages/promotions/index.php:28
    163 #: includes/pages/promotions/partials/layout-section.php:11
    164 #: slope-promotions-legacy.php:255
     163#: includes/pages/promotions/partials/layout-section.php:14
     164#: slope-promotions-legacy.php:261
    165165msgid "Layout"
    166166msgstr ""
    167167
    168 #: includes/pages/promotions/partials/layout-section.php:16
     168#: includes/pages/promotions/partials/layout-section.php:19
    169169msgid "Orientamento scheda"
    170170msgstr ""
    171171
    172 #: includes/pages/promotions/partials/layout-section.php:23
     172#: includes/pages/promotions/partials/layout-section.php:26
    173173msgid "Orizzontale"
    174174msgstr ""
    175175
    176 #: includes/pages/promotions/partials/layout-section.php:24
     176#: includes/pages/promotions/partials/layout-section.php:27
    177177msgid "Verticale"
    178178msgstr ""
    179179
    180 #: includes/pages/promotions/partials/layout-section.php:39
     180#: includes/pages/promotions/partials/layout-section.php:42
    181181msgid "Numero di promozioni per riga"
    182182msgstr ""
    183183
    184 #: includes/pages/promotions/partials/layout-section.php:70
     184#: includes/pages/promotions/partials/layout-section.php:78
    185185msgid "Specifica il numero di promozioni massime da mostrare in ogni riga in schermi più larghi di 1024px. Nel layout orizzontale è possibile selezionare un massimo di 2 colonne ogni riga."
    186186msgstr ""
    187187
    188 #: includes/pages/promotions/partials/layout-section.php:82
     188#: includes/pages/promotions/partials/layout-section.php:90
    189189msgid "Descrizioni"
    190190msgstr ""
    191191
    192 #: includes/pages/promotions/partials/layout-section.php:87
    193 #: slope-promotions-legacy.php:40
     192#: includes/pages/promotions/partials/layout-section.php:95
     193#: slope-promotions-legacy.php:46
    194194msgid "Nascondi descrizione delle promozioni"
    195195msgstr ""
    196196
    197 #: includes/pages/promotions/partials/layout-section.php:96
     197#: includes/pages/promotions/partials/layout-section.php:105
    198198msgid "Massimo di righe per la descrizione delle promozioni"
    199199msgstr ""
    200200
    201 #: includes/pages/promotions/partials/promotionsList.ajax.php:8
     201#: includes/pages/promotions/partials/promotionsList.ajax.php:10
    202202msgid "Non sono presenti promozioni disponibili."
    203203msgstr ""
    204204
    205 #: includes/pages/promotions/partials/style-section.php:13
    206 #: slope-promotions-legacy.php:145
     205#: includes/pages/promotions/partials/style-section.php:17
     206#: slope-promotions-legacy.php:151
    207207msgid "Sinistra"
    208208msgstr ""
    209209
    210 #: includes/pages/promotions/partials/style-section.php:14
    211 #: slope-promotions-legacy.php:146
     210#: includes/pages/promotions/partials/style-section.php:18
     211#: slope-promotions-legacy.php:152
    212212msgid "Centro"
    213213msgstr ""
    214214
    215 #: includes/pages/promotions/partials/style-section.php:15
    216 #: slope-promotions-legacy.php:147
     215#: includes/pages/promotions/partials/style-section.php:19
     216#: slope-promotions-legacy.php:153
    217217msgid "Destra"
    218218msgstr ""
    219219
    220 #: includes/pages/promotions/partials/style-section.php:20
    221 #: slope-promotions-legacy.php:124 slope-promotions-legacy.php:184
     220#: includes/pages/promotions/partials/style-section.php:24
     221#: slope-promotions-legacy.php:130 slope-promotions-legacy.php:190
    222222msgid "Leggero"
    223223msgstr ""
    224224
    225 #: includes/pages/promotions/partials/style-section.php:21
    226 #: slope-promotions-legacy.php:125 slope-promotions-legacy.php:185
     225#: includes/pages/promotions/partials/style-section.php:25
     226#: slope-promotions-legacy.php:131 slope-promotions-legacy.php:191
    227227msgid "Normale"
    228228msgstr ""
    229229
    230 #: includes/pages/promotions/partials/style-section.php:22
    231 #: slope-promotions-legacy.php:126 slope-promotions-legacy.php:186
     230#: includes/pages/promotions/partials/style-section.php:26
     231#: slope-promotions-legacy.php:132 slope-promotions-legacy.php:192
    232232msgid "Medio"
    233233msgstr ""
    234234
    235 #: includes/pages/promotions/partials/style-section.php:23
    236 #: slope-promotions-legacy.php:127 slope-promotions-legacy.php:187
     235#: includes/pages/promotions/partials/style-section.php:27
     236#: slope-promotions-legacy.php:133 slope-promotions-legacy.php:193
    237237msgid "Grassetto Leggero"
    238238msgstr ""
    239239
    240 #: includes/pages/promotions/partials/style-section.php:24
    241 #: slope-promotions-legacy.php:128 slope-promotions-legacy.php:188
     240#: includes/pages/promotions/partials/style-section.php:28
     241#: slope-promotions-legacy.php:134 slope-promotions-legacy.php:194
    242242msgid "Grassetto"
    243243msgstr ""
    244244
    245 #: includes/pages/promotions/partials/style-section.php:38
     245#: includes/pages/promotions/partials/style-section.php:42
    246246msgid "Contenitore"
    247247msgstr ""
    248248
    249 #: includes/pages/promotions/partials/style-section.php:43
    250 #: slope-promotions-legacy.php:65
     249#: includes/pages/promotions/partials/style-section.php:47
     250#: slope-promotions-legacy.php:71
    251251msgid "Colore dello sfondo"
    252252msgstr ""
    253253
    254 #: includes/pages/promotions/partials/style-section.php:51
    255 #: slope-promotions-legacy.php:92
     254#: includes/pages/promotions/partials/style-section.php:55
     255#: slope-promotions-legacy.php:98
    256256msgid "Raggio dei bordi"
    257257msgstr ""
    258258
    259 #: includes/pages/promotions/partials/style-section.php:67
     259#: includes/pages/promotions/partials/style-section.php:71
    260260msgid "Seleziona il raggio di arrotondamento degli angoli delle schede promozioni. Ad un raggio più alto corrisponde un arrotondamento degli angoli maggiore."
    261261msgstr ""
    262262
    263 #: includes/pages/promotions/partials/style-section.php:78
     263#: includes/pages/promotions/partials/style-section.php:82
    264264msgid "Titolo"
    265265msgstr ""
    266266
    267 #: includes/pages/promotions/partials/style-section.php:84
    268 #: includes/pages/promotions/partials/style-section.php:159
    269 #: includes/pages/promotions/partials/style-section.php:243
    270 #: includes/sections/slope-reservations/settings-section.php:67
    271 #: slope-promotions-legacy.php:104 slope-promotions-legacy.php:174
    272 #: slope-promotions-legacy.php:206
     267#: includes/pages/promotions/partials/style-section.php:88
     268#: includes/pages/promotions/partials/style-section.php:163
     269#: includes/pages/promotions/partials/style-section.php:249
     270#: includes/pages/reservations/partials/form.php:68
     271#: slope-promotions-legacy.php:110 slope-promotions-legacy.php:180
     272#: slope-promotions-legacy.php:212
    273273msgid "Colore del testo"
    274274msgstr ""
    275275
    276 #: includes/pages/promotions/partials/style-section.php:94
    277 #: includes/pages/promotions/partials/style-section.php:169
    278 #: slope-promotions-legacy.php:113
     276#: includes/pages/promotions/partials/style-section.php:98
     277#: includes/pages/promotions/partials/style-section.php:173
     278#: slope-promotions-legacy.php:119
    279279msgid "Dimensione del testo"
    280280msgstr ""
    281281
    282 #: includes/pages/promotions/partials/style-section.php:111
    283 #: includes/pages/promotions/partials/style-section.php:186
    284 #: includes/pages/promotions/partials/style-section.php:253
     282#: includes/pages/promotions/partials/style-section.php:115
     283#: includes/pages/promotions/partials/style-section.php:190
     284#: includes/pages/promotions/partials/style-section.php:259
    285285msgid "Peso del testo"
    286286msgstr ""
    287287
    288 #: includes/pages/promotions/partials/style-section.php:129
     288#: includes/pages/promotions/partials/style-section.php:133
    289289msgid "Allineamento del titolo"
    290290msgstr ""
    291291
    292 #: includes/pages/promotions/partials/style-section.php:152
     292#: includes/pages/promotions/partials/style-section.php:156
    293293msgid "Descrizione"
    294294msgstr ""
    295295
    296 #: includes/pages/promotions/partials/style-section.php:204
    297 #: slope-promotions-legacy.php:149
     296#: includes/pages/promotions/partials/style-section.php:208
     297#: slope-promotions-legacy.php:155
    298298msgid "Allineamento del testo"
    299299msgstr ""
    300300
    301 #: includes/pages/promotions/partials/style-section.php:225
    302 #: includes/sections/slope-reservations/settings-section.php:20
     301#: includes/pages/promotions/partials/style-section.php:231
     302#: includes/pages/reservations/partials/form.php:21
    303303msgid "Pulsante"
    304304msgstr ""
    305305
    306 #: includes/pages/promotions/partials/style-section.php:232
    307 #: includes/sections/slope-reservations/settings-section.php:58
    308 #: slope-promotions-legacy.php:165
     306#: includes/pages/promotions/partials/style-section.php:238
     307#: includes/pages/reservations/partials/form.php:59
     308#: slope-promotions-legacy.php:171
    309309msgid "Colore di sfondo"
     310msgstr ""
     311
     312#: includes/pages/reservations/index.php:6
     313msgid "Personalizza il widget di prenotazione di Slope. Usa lo "
     314msgstr ""
     315
     316#: includes/pages/reservations/partials/form.php:24
     317msgid "Testo del pulsante in italiano"
     318msgstr ""
     319
     320#: includes/pages/reservations/partials/form.php:27
     321msgid "Es: Prenota"
     322msgstr ""
     323
     324#: includes/pages/reservations/partials/form.php:30
     325msgid "Testo del pulsante in inglese"
     326msgstr ""
     327
     328#: includes/pages/reservations/partials/form.php:32
     329msgid "Es: Book now"
     330msgstr ""
     331
     332#: includes/pages/reservations/partials/form.php:35
     333msgid "Testo del pulsante in francese"
     334msgstr ""
     335
     336#: includes/pages/reservations/partials/form.php:37
     337msgid "Es: Réserver"
     338msgstr ""
     339
     340#: includes/pages/reservations/partials/form.php:40
     341msgid "Testo del pulsante in tedesco"
     342msgstr ""
     343
     344#: includes/pages/reservations/partials/form.php:42
     345msgid "Es: Buchen"
     346msgstr ""
     347
     348#: includes/pages/reservations/partials/form.php:45
     349msgid "Testo del pulsante in grassetto"
     350msgstr ""
     351
     352#: includes/pages/reservations/partials/form.php:54
     353msgid "Aspetto"
     354msgstr ""
     355
     356#: includes/pages/reservations/partials/form.php:74
     357msgid "Mostra selezione bambini"
     358msgstr ""
     359
     360#: includes/pages/reservations/partials/form.php:79
     361msgid "Visualizza il widget su due righe"
     362msgstr ""
     363
     364#: includes/pages/reservations/partials/form.php:90
     365msgid "Filtri"
     366msgstr ""
     367
     368#: includes/pages/reservations/partials/form.php:93
     369msgid "Età minima dei bambini (in anni)"
     370msgstr ""
     371
     372#: includes/pages/reservations/partials/form.php:95
     373msgid "Es: 0"
     374msgstr ""
     375
     376#: includes/pages/reservations/partials/form.php:98
     377msgid "Età massima dei bambini (in anni)"
     378msgstr ""
     379
     380#: includes/pages/reservations/partials/form.php:100
     381msgid "Es: 12"
     382msgstr ""
     383
     384#: includes/pages/reservations/partials/form.php:103
     385msgid "Soggiorno minimo suggerito"
     386msgstr ""
     387
     388#: includes/pages/reservations/partials/form.php:105
     389msgid "Es: 3"
    310390msgstr ""
    311391
     
    358438msgstr ""
    359439
    360 #: includes/sections/slope-reservations/settings-section.php:23
    361 msgid "Testo del pulsante in italiano"
    362 msgstr ""
    363 
    364 #: includes/sections/slope-reservations/settings-section.php:26
    365 msgid "Es: Prenota"
    366 msgstr ""
    367 
    368 #: includes/sections/slope-reservations/settings-section.php:29
    369 msgid "Testo del pulsante in inglese"
    370 msgstr ""
    371 
    372 #: includes/sections/slope-reservations/settings-section.php:31
    373 msgid "Es: Book now"
    374 msgstr ""
    375 
    376 #: includes/sections/slope-reservations/settings-section.php:34
    377 msgid "Testo del pulsante in francese"
    378 msgstr ""
    379 
    380 #: includes/sections/slope-reservations/settings-section.php:36
    381 msgid "Es: Réserver"
    382 msgstr ""
    383 
    384 #: includes/sections/slope-reservations/settings-section.php:39
    385 msgid "Testo del pulsante in tedesco"
    386 msgstr ""
    387 
    388 #: includes/sections/slope-reservations/settings-section.php:41
    389 msgid "Es: Buchen"
    390 msgstr ""
    391 
    392 #: includes/sections/slope-reservations/settings-section.php:44
    393 msgid "Testo del pulsante in grassetto"
    394 msgstr ""
    395 
    396 #: includes/sections/slope-reservations/settings-section.php:53
    397 msgid "Aspetto"
    398 msgstr ""
    399 
    400 #: includes/sections/slope-reservations/settings-section.php:73
    401 msgid "Mostra selezione bambini"
    402 msgstr ""
    403 
    404 #: includes/sections/slope-reservations/settings-section.php:78
    405 msgid "Visualizza il widget su due righe"
    406 msgstr ""
    407 
    408 #: includes/sections/slope-reservations/settings-section.php:89
    409 msgid "Filtri"
    410 msgstr ""
    411 
    412 #: includes/sections/slope-reservations/settings-section.php:92
    413 msgid "Età massima dei bambini (in anni)"
    414 msgstr ""
    415 
    416 #: includes/sections/slope-reservations/settings-section.php:94
    417 msgid "Es: 12"
    418 msgstr ""
    419 
    420 #: includes/sections/slope-reservations/settings-section.php:97
    421 msgid "Soggiorno minimo suggerito"
    422 msgstr ""
    423 
    424 #: includes/sections/slope-reservations/settings-section.php:99
    425 msgid "Es: 3"
    426 msgstr ""
    427 
    428 #: slope-promotions-legacy.php:20
     440#: slope-promotions-legacy.php:26
    429441msgid "Attenzione: Questo widget per le promozioni verrà sostituito in una versione futura. Ti consigliamo di utilizzare il nuovo widget delle promozioni di Slope."
    430442msgstr ""
    431443
    432 #: slope-promotions-legacy.php:25
     444#: slope-promotions-legacy.php:31
    433445msgid "Personalizza il widget delle promozioni di Slope. Usa lo "
    434446msgstr ""
    435447
    436 #: slope-promotions-legacy.php:31
     448#: slope-promotions-legacy.php:37
    437449msgid "ID struttura"
    438450msgstr ""
    439451
    440 #: slope-promotions-legacy.php:33
     452#: slope-promotions-legacy.php:39
    441453msgid "Il tuo Slope ID"
    442454msgstr ""
    443455
    444 #: slope-promotions-legacy.php:49
     456#: slope-promotions-legacy.php:55
    445457msgid "Nascondi informazioni delle promozioni"
    446458msgstr ""
    447459
    448 #: slope-promotions-legacy.php:63
     460#: slope-promotions-legacy.php:69
    449461msgid "SCHEDA"
    450462msgstr ""
    451463
    452 #: slope-promotions-legacy.php:74
     464#: slope-promotions-legacy.php:80
    453465msgid "Spessore dei bordi"
    454466msgstr ""
    455467
    456 #: slope-promotions-legacy.php:83
     468#: slope-promotions-legacy.php:89
    457469msgid "Colore dei bordi"
    458470msgstr ""
    459471
    460 #: slope-promotions-legacy.php:102
     472#: slope-promotions-legacy.php:108
    461473msgid "TITOLO"
    462474msgstr ""
    463475
    464 #: slope-promotions-legacy.php:130 slope-promotions-legacy.php:190
     476#: slope-promotions-legacy.php:136 slope-promotions-legacy.php:196
    465477msgid "Peso del font"
    466478msgstr ""
    467479
    468 #: slope-promotions-legacy.php:163
     480#: slope-promotions-legacy.php:169
    469481msgid "PULSANTE"
    470482msgstr ""
    471483
    472 #: slope-promotions-legacy.php:204
     484#: slope-promotions-legacy.php:210
    473485msgid "TESTO"
    474486msgstr ""
    475487
    476 #: slope-promotions-legacy.php:225
     488#: slope-promotions-legacy.php:231
    477489msgid "Numero di schede da mostrare per riga"
    478490msgstr ""
    479491
    480 #: slope-promotions-legacy.php:249
     492#: slope-promotions-legacy.php:255
    481493msgid "Impostazioni"
    482494msgstr ""
    483495
    484 #: slope-reservations.php:19
    485 msgid "Personalizza il widget di prenotazione di Slope. Usa lo "
    486 msgstr ""
    487 
    488 #: slope-widgets.php:212
     496#: slope-widgets.php:196
    489497msgid "Settings"
    490498msgstr ""
  • slope-widgets/tags/4.3.3/readme.txt

    r3294859 r3385288  
    66Requires PHP: 7.0
    77Tested up to: 6.8
    8 Stable tag: 4.3.2
     8Stable tag: 4.3.3
    99License: GPLv2 or later
    1010License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    4040== Changelog ==
    4141
     42= 4.3.3 =
     43* Possibilità di indicare l'età minima dei bambini nelle impostazioni del plugin
     44* Correzioni minori
     45
    4246= 4.3.2 =
    4347* Correzioni minori
  • slope-widgets/tags/4.3.3/slope-promotions-legacy.php

    r3289147 r3385288  
    11<?php
    22// SLOPE PROMOTIONS
     3
     4use SlopeWidgets\Settings\GlobalSettingsProvider;
     5use SlopeWidgets\Settings\LegacyPromotionsSettingProvider;
     6use SlopeWidgets\Enums\FontWeight;
     7use SlopeWidgets\Enums\CardLayout;
     8use SlopeWidgets\Enums\TextAlignment;
    39
    410add_shortcode('slope-promotions', 'slope_promotions');
  • slope-widgets/tags/4.3.3/slope-widgets.php

    r3294859 r3385288  
    33* Plugin Name: Slope Widgets
    44* Description: Aggiungi i widget di Slope al sito web WordPress della tua struttura ricettiva! Questo plugin ti permette di mostrare la barra delle prenotazioni, i pacchetti e le promozioni tramite shortcode personalizzabili.
    5 * Version: 4.3.2
     5* Version: 4.3.3
    66* Author: Slope
    77* Author URI: https://www.slope.it/
     
    1616
    1717// We use this constant to invalidate the cache of the plugin's assets
    18 const SLOPE_WIDGETS_CACHE_BUST_VERSION = '4.3.2';
     18const SLOPE_WIDGETS_CACHE_BUST_VERSION = '4.3.3';
    1919
    2020// Current version of the database schema. It is used to check if the database schema needs to be updated.
     
    2323const SLOPE_DB_VERSION_OPTION_KEY = 'slope_db_schema_version';
    2424
    25 // TODO: At the moment this is used only for the new promotions. Reservation plugin and legacy promotions have hardcoded
    26 //  values inside `slope-widgets.js`. We should refactor this to use the same constant in the future.
     25// TODO: At the moment this is used only for the new promotions. Legacy promotions have hardcoded values inside
     26//  `slope-widgets.js`. We should refactor this to use the same constant in the future.
    2727define(
    2828    'SLOPE_BOOKING_ENGINE_BASE_URL',
     
    4141define('SLOPE_WIDGETS_PATH', plugin_dir_path(__FILE__));
    4242
    43 // Initialization
    44 require_once(plugin_dir_path(__FILE__) . 'includes/enums/AbstractEnum.php');
    45 require_once(plugin_dir_path(__FILE__) . 'includes/enums/CardLayout.php');
    46 require_once(plugin_dir_path(__FILE__) . 'includes/enums/FontWeight.php');
    47 require_once(plugin_dir_path(__FILE__) . 'includes/enums/TextAlignment.php');
    48 require_once(plugin_dir_path(__FILE__) . 'includes/settings/PromotionsSettingsProvider.php');
    49 require_once(plugin_dir_path(__FILE__) . 'includes/settings/ReservationsSettingsProvider.php');
    50 require_once(plugin_dir_path(__FILE__) . 'includes/settings/LegacyPromotionsSettingProvider.php');
    51 require_once(plugin_dir_path(__FILE__) . 'includes/settings/GlobalSettingsProvider.php');
    52 require_once(plugin_dir_path(__FILE__) . 'includes/DBUpgrader.php');
    53 require_once(plugin_dir_path(__FILE__) . 'includes/helpers/LanguageResolver.php');
    54 require_once(plugin_dir_path(__FILE__) . 'includes/admin/GlobalSettings.php');
    55 require_once(plugin_dir_path(__FILE__) . 'includes/admin/WelcomePage.php');
    56 require_once(plugin_dir_path(__FILE__) . 'includes/admin/Promotions.php');
    57 require_once(plugin_dir_path(__FILE__) . 'validation/rules/ValidationRule.php');
    58 require_once(plugin_dir_path(__FILE__) . 'validation/Validator.php');
    59 require_once(plugin_dir_path(__FILE__) . 'validation/rules/HexColor.php');
    60 require_once(plugin_dir_path(__FILE__) . 'validation/rules/InArray.php');
    61 require_once(plugin_dir_path(__FILE__) . 'validation/rules/Range.php');
    62 require_once(plugin_dir_path(__FILE__) . 'validation/rules/Uuid.php');
     43// Register PSR-4 autoloader
     44require_once(SLOPE_WIDGETS_PATH . 'includes/Autoloader.php');
     45SlopeWidgets\Autoloader::register();
     46
     47// Use statements for classes we'll instantiate
     48use SlopeWidgets\Admin\WelcomePage;
     49use SlopeWidgets\Admin\GlobalSettings;
     50use SlopeWidgets\Admin\Reservations;
     51use SlopeWidgets\Admin\Promotions;
     52use SlopeWidgets\DBUpgrader;
     53use SlopeWidgets\Settings\ReservationsSettingsProvider;
    6354
    6455// NOTE: The order of instantiations is important to render the item of the admin menu in the right order. As we are
     
    6758$welcome_page = new WelcomePage();
    6859$globalSettings = new GlobalSettings();
     60$reservationsPage = new Reservations();
    6961
    7062// Hook
     
    178170function slope_init()
    179171{
    180     // Slope reservations
    181     // NOTE: The key 'slope_options' is used to store settings about the reservations widget
    182     register_setting('slope_options', 'slope_options', 'slope_reservations_options_validate');
    183     add_settings_section('reservations_section', '', 'slope_reservations_intro', 'slope_reservations_page');
    184     add_settings_field('slope_text_color', '', 'slope_reservations_page', 'reservations_section');
    185     add_settings_field('slope_text_color', '', 'slope_reservations_page', 'reservations_section');
    186 
    187172    // Slope promotions legacy
    188173    register_setting('slope_promotions_options', 'slope_promotions_options');
    189174    add_settings_section('promotions_section', '', 'slope_promotions_intro', 'slope_promotions_page');
    190 
    191175}
    192176
     
    202186    // Slug is an alphanumeric string used to identify the page in the menu. Should be unique for this menu page so we use the plugin's main file path.
    203187    $slug = 'slope-widgets/slope-widgets.php';
    204     add_submenu_page($slug, 'Reservations', 'Reservations', 'manage_options', 'slope_reservations', 'slope_reservations_options_page');
    205188    add_submenu_page($slug, 'Promotions [Deprecato]', 'Promotions [Deprecato]', 'manage_options', 'slope_promotions', 'slope_promotions_options_page');
    206189}
     
    236219}
    237220
    238 //include plugin reservations functionalities
    239 include("slope-reservations.php");
    240 
    241221//include plugin promotions functionalities
    242222// TODO: This is going to be removed in a future release
     
    245225// Include promotion list partials
    246226include("includes/pages/promotions/partials/promotionsList.ajax.php");
    247 
    248 //include plugin settings functionalities
    249 include('includes/sections/slope-reservations/settings-section.php');
  • slope-widgets/tags/4.3.3/validation/Validator.php

    r3289147 r3385288  
    22declare(strict_types=1);
    33
    4 namespace validation;
     4namespace SlopeWidgets\Validation;
    55
    6 use validation\rules\ValidationRule;
     6use SlopeWidgets\Validation\Rules\ValidationRule;
    77
    88class Validator
  • slope-widgets/tags/4.3.3/validation/rules/HexColor.php

    r3289147 r3385288  
    22declare(strict_types=1);
    33
    4 namespace validation\rules;
     4namespace SlopeWidgets\Validation\Rules;
    55
    66class HexColor implements ValidationRule
  • slope-widgets/tags/4.3.3/validation/rules/InArray.php

    r3289147 r3385288  
    22declare(strict_types=1);
    33
    4 namespace validation\rules;
     4namespace SlopeWidgets\Validation\Rules;
    55
    66class InArray implements ValidationRule
  • slope-widgets/tags/4.3.3/validation/rules/Range.php

    r3289147 r3385288  
    22declare(strict_types=1);
    33
    4 namespace validation\rules;
     4namespace SlopeWidgets\Validation\Rules;
    55
    66class Range implements ValidationRule
  • slope-widgets/tags/4.3.3/validation/rules/Uuid.php

    r3289147 r3385288  
    22declare(strict_types=1);
    33
    4 namespace validation\rules;
     4namespace SlopeWidgets\Validation\Rules;
    55
    66class Uuid implements ValidationRule
  • slope-widgets/tags/4.3.3/validation/rules/ValidationRule.php

    r3289147 r3385288  
    22declare(strict_types=1);
    33
    4 namespace validation\rules;
     4namespace SlopeWidgets\Validation\Rules;
    55
    66interface ValidationRule
  • slope-widgets/trunk/css/slope-admin.css

    r3289147 r3385288  
    33@keyframes slope-spin{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}.slope-promo-container{width:100%!important}#slp-arrow-icon{height:1rem}#slp-settings-border-radius-container{display:flex;gap:10px;align-items:center}.slp-promotion-card{flex:1 1 300px;border-radius:10px;margin-bottom:1rem;position:relative;min-width:280px;display:flex;flex-direction:column}.slp-loading-spinner{width:40px;height:40px;border:4px solid #f3f3f3;border-top:4px solid #3498db;border-radius:50%;animation:slope-spin 2s linear infinite}.slp-error-message,.slp-loading-indicator{display:flex;justify-content:center;align-items:center;margin:auto}.slp-loading-indicator{padding:20px;width:100%}.slp-error-message{border-radius:10px;background:#eee;padding:30px;text-align:center}.slp-promotion-container{flex:1;display:flex;flex-direction:column;width:fit-content;max-width:100%;overflow:hidden}.slp-promotion-image{background-size:cover;background-repeat:no-repeat;background-position:center;padding:16px;min-height:180px}.slp-promotion-expiration-date{top:1rem;left:1rem;z-index:2;padding:4px 8px;border-radius:10px;font-size:.75rem;font-weight:700;width:fit-content}.slp-promotion-title{font-size:clamp(1rem,2.5vw,1.25rem);font-weight:700;line-height:1.3;margin-bottom:clamp(.5rem,2vw,1rem)}.slp-promotion-description{font-size:clamp(.875rem,2vw,1rem);line-height:1.5;-webkit-box-orient:vertical;white-space:normal;display:-webkit-box;overflow:hidden;text-overflow:ellipsis;max-width:100%;word-wrap:break-word}.slp-promotion-actions{display:flex;flex-direction:column;gap:.5rem;margin-top:auto}.slp-see-details{font-size:.9rem;align-self:flex-start;font-weight:700;display:flex;align-items:center;margin-bottom:.5rem;gap:.5rem}.slp-reserve-button{display:block;padding:.75rem 0;font-size:1rem;font-weight:700;border-radius:10px;text-decoration:none;text-align:center}.slp-modal,.slp-modal-overlay{z-index:1000;top:0;left:0;width:100%;height:100%}.slp-modal{position:fixed;background-color:rgba(0,0,0,.4);opacity:0;visibility:hidden;transition:opacity .3s ease,visibility .3s ease}.slp-modal-overlay{background-image:linear-gradient(to bottom,transparent 0,#d1d2da 250px,#d1d2da,#d1d2da);border-radius:10px;position:absolute}.slp-modal-container{background-size:100%,cover;background-repeat:no-repeat;background-position:top,center;padding:clamp(8px,2vw,12px);border-radius:10px;width:min(80vw,600px);z-index:1001;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.slp-close-modal-button{position:absolute;right:1rem;line-height:.5;top:1rem;font-size:24px;cursor:pointer;z-index:1003;border-radius:50%;padding:.5rem}.slp-modal-promotion-container{border-radius:10px;position:relative;z-index:1001;margin-top:clamp(10vh,16vh,24vh)}.slp-modal-promotion-details{max-width:100%;word-wrap:break-word;max-height:25vh;overflow-y:auto}.slp-modal-lodgings,.slp-modal-promotion-details{font-size:clamp(.875rem,2vw,1rem);margin-bottom:1rem;line-height:1.5}.slp-modal-visible{opacity:1;visibility:visible}.slp-modal-hidden{opacity:0;visibility:hidden}@media screen and (max-width:768px){.slp-modal-promotion-details{max-height:50vh}.slp-modal-container{width:90vw;background-size:150%,cover}}
    44.slp-welcome-button{display:inline-flex;align-items:center;right:10px;bottom:30px;height:36px;padding:0 10px;border-radius:3px;text-align:center;text-transform:uppercase;text-decoration:none}.slp-welcome-button #skip-icon{margin-right:8px}.slope-slp-welcome{width:99%}#slp-welcome-button-container{display:flex;flex-direction:row;gap:1rem;justify-content:space-between;margin-top:1rem}#slp-next-button{display:inline-flex;align-items:center;gap:2px;margin-right:1rem;height:36px;text-transform:uppercase;padding:0 10px;border-radius:3px;text-align:center;text-decoration:none}#slp-next-button-icon{width:10px;margin-right:5px}
    5 .slope-widgets-container{box-sizing:border-box}.slope-block{border-radius:.2rem;border:1px solid rgba(0,0,0,.1);line-height:1;margin:0 auto;max-width:900px;padding:8px;position:relative}.slope-block *{box-sizing:border-box}.slope-block .slope-reservation-section-container{cursor:pointer!important;text-align:left;padding:10px;border-radius:6px;display:flex;align-items:center}.slope-block .slope-reservation-section-container.slope-highlight:hover{background-color:rgba(0,0,0,.1)}.slope-block .slope-reservation-section-container .slope-check-in-container{margin:auto}.slope-block input[type=number]{-webkit-appearance:none;appearance:none;background:0 0;border-radius:0;border:0;color:inherit;display:block;font:inherit;margin:0;outline:0;padding:0;width:auto}.slope-block label{display:block;font-size:14px;text-align:left}.slope-block{min-height:225px}.slope-reservation-dates{display:flex;justify-content:space-between;padding-right:8px;width:100%}.slope-guests-and-button-container{width:100%;z-index:10}.slope-reservation-section-container.slope-check-out{justify-content:flex-end}.slope-block .slope-reservation-section-container .slope-guests-wrapper,.slope-reservation-section-container,.slope-reservation-section-container.slope-submit-section,.slope-reservation-submit{width:100%}.slope-guests-count-container{width:100%;text-align:right}.slope-cancel-guests,.slope-save-guests{background:0 0;display:inline-block;text-align:center;width:49%}.slope-horizontal-separator{border-bottom:solid 1px rgba(0,0,0,.1);display:block;margin-bottom:10px;margin-top:10px;width:100%}.slope-block .slope-check-out-wrapper{justify-content:flex-end;text-align:right}.slope-vertical-divider{display:none}.slope-reservation-dates .slope-reservation-icon-container{align-items:center;display:flex;justify-content:center;opacity:.4;width:20px}.dayContainer+.dayContainer{border-left:1px solid rgba(0,0,0,.1)}.slope-block .slope-rooms-count-container{padding-right:32px}.slope-guests-buttons-container{display:flex}.slope-block .slope-check-in-input,.slope-block .slope-check-out-input{border:0;height:0;left:0;padding:0;position:absolute;top:88px;visibility:hidden!important}.slope-block .slope-check-in-label,.slope-block .slope-check-out-label,.slope-block .slope-guests-label,.slope-block .slope-rooms-label{display:block!important;font-size:13px!important;height:15px!important;line-height:15px!important}.slope-block .slope-reservation-section-container .slope-guests-wrapper{white-space:nowrap;display:flex}.slope-block .slope-adults-count,.slope-block .slope-check-in-date,.slope-block .slope-check-out-date,.slope-block .slope-children-count,.slope-block .slope-guests-adults,.slope-block .slope-guests-children,.slope-block .slope-rooms-count{border-radius:.2rem;font-size:16px;line-height:20px;min-width:175px}.slope-block input[type=submit].slope-reservation-submit{border-radius:.2rem;font-size:14px!important;font-weight:500;line-height:20px;min-width:175px}.slope-stepper-container{animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1);border-radius:6px;border:1px solid rgba(0,0,0,.1);display:none;font-size:16px;line-height:16px;margin-top:10px;padding:10px;position:absolute;width:300px;z-index:9999}.slope-block input[type=text],.slope-stepper-container input[type=text]{border:0!important;cursor:default!important;font-size:inherit!important;margin-bottom:0!important;min-height:0!important;outline:0!important;padding:0!important}.slope-stepper-container input[type=text]{background-color:inherit!important}.slope-block button,.slope-block input[type=button],.slope-block input[type=reset],.slope-block input[type=submit],.slope-stepper-container button,.slope-stepper-container input[type=button],.slope-stepper-container input[type=reset],.slope-stepper-container input[type=submit]{border:0!important;cursor:pointer;font-family:inherit;font-size:inherit!important;margin-bottom:0!important;margin-top:0!important;min-height:30px!important;outline:0!important;padding:12px!important;text-transform:uppercase;transition:all .2s ease-in-out}.slope-block button:hover,.slope-block input[type=button]:hover,.slope-block input[type=reset]:hover,.slope-block input[type=submit]:hover,.slope-stepper-container button:hover,.slope-stepper-container input[type=button]:hover,.slope-stepper-container input[type=reset]:hover,.slope-stepper-container input[type=submit]:hover{opacity:.8}.slope-stepper-label{padding-bottom:1px}.slope-stepper-container input[type=number],.slope-stepper-container input[type=text]{width:auto}.slope-stepper-container .slope-stepper-value{text-align:center;margin:0;border:0;box-sizing:border-box;background:0 0!important}.slope-stepper-container .slope-decrement-button,.slope-stepper-container .slope-increment-button{align-items:center;background:0 0;border-radius:50%;cursor:pointer;display:flex;float:right;font-size:18px;font-weight:700;height:26px;justify-content:center;line-height:18px;margin:0!important;opacity:1;padding:0;text-align:center;text-decoration:none;transition:all .2s ease-in-out!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;width:26px}.slope-stepper-container .slope-stepper-value{width:44px!important}.slope-stepper-container .slope-guests-stepper,.slope-stepper-container .slope-rooms-stepper{display:flex}.slope-stepper-container .slope-horizontal-separator{width:100%;border-bottom:solid 1px rgba(0,0,0,.1);margin:10px 0;display:block!important}.slope-vertical-divider{border-left:1px solid rgba(0,0,0,.1);height:42px;margin-bottom:auto;margin-top:auto}.slope-guests-count-row,.slope-rooms-stepper-container{align-items:center;display:flex;justify-content:space-between;padding:10px}.slope-rooms-stepper{font-size:18px;padding:0}.slope-guests-count-row.slope-padding-top{padding-top:20px}.slope-children-age{font-size:12px}#slope-widget p,#slope-widget table td{border:0!important}.slope-stepper-container .slope-room-label{padding:10px;font-size:16px;font-weight:700}@media (min-width:992px){.slp-responsive-layout.slope-block{display:flex;justify-content:space-between;min-height:auto;min-width:900px}.slp-responsive-layout .slope-horizontal-separator{display:none}.slp-responsive-layout .slope-guests-and-button-container{width:65%;padding-left:8px;display:flex;justify-content:space-between}.slp-responsive-layout .slope-reservation-dates{width:35%}.slp-responsive-layout .slope-vertical-divider{display:block}.slp-responsive-layout .slope-reservation-dates .slope-reservation-icon-container{width:60px}.slp-responsive-layout .slope-reservation-section-container,.slp-responsive-layout .slope-reservation-section-container.slope-submit-section{width:50%}.slp-responsive-layout .slope-guests-count-container{text-align:left}}
     5.slope-widgets-container{box-sizing:border-box}.slope-justify-flex-end{justify-content:flex-end}.slope-width-100{width:100%}.slope-block{border-radius:.2rem;border:1px solid rgba(0,0,0,.1);line-height:1;margin:0 auto;max-width:900px;padding:8px;position:relative}.slope-block *{box-sizing:border-box}.slope-block .slope-reservation-section-container{cursor:pointer!important;text-align:left;padding:10px;border-radius:6px;display:flex;align-items:center}.slope-block .slope-reservation-section-container.slope-highlight:hover{background-color:rgba(0,0,0,.1)}.slope-block .slope-reservation-section-container .slope-check-in-container{margin:auto}.slope-block input[type=number]{-webkit-appearance:none;appearance:none;background:0 0;border-radius:0;border:0;color:inherit;display:block;font:inherit;margin:0;outline:0;padding:0;width:auto}.slope-block label{display:block;font-size:14px;text-align:left}.slope-block{min-height:225px}.slope-reservation-dates{display:flex;justify-content:space-between;padding-right:8px}.slope-guests-and-button-container{z-index:10}.slope-block .slope-reservation-section-container .slope-guests-wrapper,.slope-reservation-section-container{width:100%}.slope-guests-count-container{width:100%;text-align:right}.slope-cancel-guests,.slope-save-guests{background:0 0;display:inline-block;text-align:center;width:49%}.slope-horizontal-separator{border-bottom:solid 1px rgba(0,0,0,.1);display:block;margin-bottom:10px;margin-top:10px}.slope-block .slope-check-out-wrapper{text-align:right}.slope-vertical-divider{display:none}.slope-reservation-dates .slope-reservation-icon-container{align-items:center;display:flex;justify-content:center;opacity:.4;width:20px}.dayContainer+.dayContainer{border-left:1px solid rgba(0,0,0,.1)}.slope-block .slope-rooms-count-container{padding-right:32px}.slope-guests-buttons-container{display:flex}.slope-block .slope-check-in-input,.slope-block .slope-check-out-input{border:0;height:0;left:0;padding:0;position:absolute;top:88px;visibility:hidden!important}.slope-block .slope-check-in-label,.slope-block .slope-check-out-label,.slope-block .slope-guests-label,.slope-block .slope-rooms-label{display:block!important;font-size:13px!important;height:15px!important;line-height:15px!important}.slope-block .slope-reservation-section-container .slope-guests-wrapper{white-space:nowrap;display:flex}.slope-block .slope-adults-count,.slope-block .slope-check-in-date,.slope-block .slope-check-out-date,.slope-block .slope-children-count,.slope-block .slope-guests-adults,.slope-block .slope-guests-children,.slope-block .slope-rooms-count{border-radius:.2rem;font-size:16px;line-height:20px;min-width:175px}.slope-block input[type=submit].slope-reservation-submit{border-radius:.2rem;font-size:14px!important;font-weight:500;line-height:20px;min-width:175px}.slope-stepper-container{animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1);border-radius:6px;border:1px solid rgba(0,0,0,.1);display:none;font-size:16px;line-height:16px;margin-top:10px;padding:10px;position:absolute;width:300px;z-index:9999}.slope-block input[type=text],.slope-stepper-container input[type=text]{border:0!important;cursor:default!important;font-size:inherit!important;margin-bottom:0!important;min-height:0!important;outline:0!important;padding:0!important}.slope-stepper-container input[type=text]{background-color:inherit!important}.slope-block button,.slope-block input[type=button],.slope-block input[type=reset],.slope-block input[type=submit],.slope-stepper-container button,.slope-stepper-container input[type=button],.slope-stepper-container input[type=reset],.slope-stepper-container input[type=submit]{border:0!important;cursor:pointer;font-family:inherit;font-size:inherit!important;margin-bottom:0!important;margin-top:0!important;min-height:30px!important;outline:0!important;padding:12px!important;text-transform:uppercase;transition:all .2s ease-in-out}.slope-block button:hover,.slope-block input[type=button]:hover,.slope-block input[type=reset]:hover,.slope-block input[type=submit]:hover,.slope-stepper-container button:hover,.slope-stepper-container input[type=button]:hover,.slope-stepper-container input[type=reset]:hover,.slope-stepper-container input[type=submit]:hover{opacity:.8}.slope-stepper-label{padding-bottom:1px}.slope-stepper-container input[type=number],.slope-stepper-container input[type=text]{width:auto}.slope-stepper-container .slope-stepper-value{text-align:center;margin:0;border:0;box-sizing:border-box;background:0 0!important}.slope-stepper-container .slope-decrement-button,.slope-stepper-container .slope-increment-button{align-items:center;background:0 0;border-radius:50%;cursor:pointer;display:flex;float:right;font-size:18px;font-weight:700;height:26px;justify-content:center;line-height:18px;margin:0!important;opacity:1;padding:0;text-align:center;text-decoration:none;transition:all .2s ease-in-out!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;width:26px}.slope-stepper-container .slope-stepper-value{width:44px!important}.slope-stepper-container .slope-guests-stepper,.slope-stepper-container .slope-rooms-stepper{display:flex}.slope-stepper-container .slope-horizontal-separator{width:100%;border-bottom:solid 1px rgba(0,0,0,.1);margin:10px 0;display:block!important}.slope-vertical-divider{border-left:1px solid rgba(0,0,0,.1);height:42px;margin-bottom:auto;margin-top:auto}.slope-guests-count-row,.slope-rooms-stepper-container{align-items:center;display:flex;justify-content:space-between;padding:10px}.slope-rooms-stepper{font-size:18px;padding:0}.slope-guests-count-row.slope-padding-top{padding-top:20px}.slope-children-age{font-size:12px}#slope-widget p,#slope-widget table td{border:0!important}.slope-stepper-container .slope-room-label{padding:10px;font-size:16px;font-weight:700}@media (min-width:992px){.slp-responsive-layout.slope-block{display:flex;justify-content:space-between;min-height:auto;min-width:900px}.slp-responsive-layout .slope-horizontal-separator{display:none}.slp-responsive-layout .slope-guests-and-button-container{width:65%;padding-left:8px;display:flex;justify-content:space-between}.slp-responsive-layout .slope-reservation-dates{width:35%}.slp-responsive-layout .slope-vertical-divider{display:block}.slp-responsive-layout .slope-reservation-dates .slope-reservation-icon-container{width:60px}.slp-responsive-layout .slope-reservation-section-container,.slp-responsive-layout .slope-reservation-section-container.slope-submit-section{width:50%}.slp-responsive-layout .slope-guests-count-container{text-align:left}}
  • slope-widgets/trunk/css/slope-widgets.css

    r3289147 r3385288  
    1 .slope-widgets-container{box-sizing:border-box}.slope-block{border-radius:.2rem;border:1px solid rgba(0,0,0,.1);line-height:1;margin:0 auto;max-width:900px;padding:8px;position:relative}.slope-block *{box-sizing:border-box}.slope-block .slope-reservation-section-container{cursor:pointer!important;text-align:left;padding:10px;border-radius:6px;display:flex;align-items:center}.slope-block .slope-reservation-section-container.slope-highlight:hover{background-color:rgba(0,0,0,.1)}.slope-block .slope-reservation-section-container .slope-check-in-container{margin:auto}.slope-block input[type=number]{-webkit-appearance:none;appearance:none;background:0 0;border-radius:0;border:0;color:inherit;display:block;font:inherit;margin:0;outline:0;padding:0;width:auto}.slope-block label{display:block;font-size:14px;text-align:left}.slope-block{min-height:225px}.slope-reservation-dates{display:flex;justify-content:space-between;padding-right:8px;width:100%}.slope-guests-and-button-container{width:100%;z-index:10}.slope-reservation-section-container.slope-check-out{justify-content:flex-end}.slope-block .slope-reservation-section-container .slope-guests-wrapper,.slope-reservation-section-container,.slope-reservation-section-container.slope-submit-section,.slope-reservation-submit{width:100%}.slope-guests-count-container{width:100%;text-align:right}.slope-cancel-guests,.slope-save-guests{background:0 0;display:inline-block;text-align:center;width:49%}.slope-horizontal-separator{border-bottom:solid 1px rgba(0,0,0,.1);display:block;margin-bottom:10px;margin-top:10px;width:100%}.slope-block .slope-check-out-wrapper{justify-content:flex-end;text-align:right}.slope-vertical-divider{display:none}.slope-reservation-dates .slope-reservation-icon-container{align-items:center;display:flex;justify-content:center;opacity:.4;width:20px}.dayContainer+.dayContainer{border-left:1px solid rgba(0,0,0,.1)}.slope-block .slope-rooms-count-container{padding-right:32px}.slope-guests-buttons-container{display:flex}.slope-block .slope-check-in-input,.slope-block .slope-check-out-input{border:0;height:0;left:0;padding:0;position:absolute;top:88px;visibility:hidden!important}.slope-block .slope-check-in-label,.slope-block .slope-check-out-label,.slope-block .slope-guests-label,.slope-block .slope-rooms-label{display:block!important;font-size:13px!important;height:15px!important;line-height:15px!important}.slope-block .slope-reservation-section-container .slope-guests-wrapper{white-space:nowrap;display:flex}.slope-block .slope-adults-count,.slope-block .slope-check-in-date,.slope-block .slope-check-out-date,.slope-block .slope-children-count,.slope-block .slope-guests-adults,.slope-block .slope-guests-children,.slope-block .slope-rooms-count{border-radius:.2rem;font-size:16px;line-height:20px;min-width:175px}.slope-block input[type=submit].slope-reservation-submit{border-radius:.2rem;font-size:14px!important;font-weight:500;line-height:20px;min-width:175px}.slope-stepper-container{animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1);border-radius:6px;border:1px solid rgba(0,0,0,.1);display:none;font-size:16px;line-height:16px;margin-top:10px;padding:10px;position:absolute;width:300px;z-index:9999}.slope-block input[type=text],.slope-stepper-container input[type=text]{border:0!important;cursor:default!important;font-size:inherit!important;margin-bottom:0!important;min-height:0!important;outline:0!important;padding:0!important}.slope-stepper-container input[type=text]{background-color:inherit!important}.slope-block button,.slope-block input[type=button],.slope-block input[type=reset],.slope-block input[type=submit],.slope-stepper-container button,.slope-stepper-container input[type=button],.slope-stepper-container input[type=reset],.slope-stepper-container input[type=submit]{border:0!important;cursor:pointer;font-family:inherit;font-size:inherit!important;margin-bottom:0!important;margin-top:0!important;min-height:30px!important;outline:0!important;padding:12px!important;text-transform:uppercase;transition:all .2s ease-in-out}.slope-block button:hover,.slope-block input[type=button]:hover,.slope-block input[type=reset]:hover,.slope-block input[type=submit]:hover,.slope-stepper-container button:hover,.slope-stepper-container input[type=button]:hover,.slope-stepper-container input[type=reset]:hover,.slope-stepper-container input[type=submit]:hover{opacity:.8}.slope-stepper-label{padding-bottom:1px}.slope-stepper-container input[type=number],.slope-stepper-container input[type=text]{width:auto}.slope-stepper-container .slope-stepper-value{text-align:center;margin:0;border:0;box-sizing:border-box;background:0 0!important}.slope-stepper-container .slope-decrement-button,.slope-stepper-container .slope-increment-button{align-items:center;background:0 0;border-radius:50%;cursor:pointer;display:flex;float:right;font-size:18px;font-weight:700;height:26px;justify-content:center;line-height:18px;margin:0!important;opacity:1;padding:0;text-align:center;text-decoration:none;transition:all .2s ease-in-out!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;width:26px}.slope-stepper-container .slope-stepper-value{width:44px!important}.slope-stepper-container .slope-guests-stepper,.slope-stepper-container .slope-rooms-stepper{display:flex}.slope-stepper-container .slope-horizontal-separator{width:100%;border-bottom:solid 1px rgba(0,0,0,.1);margin:10px 0;display:block!important}.slope-vertical-divider{border-left:1px solid rgba(0,0,0,.1);height:42px;margin-bottom:auto;margin-top:auto}.slope-guests-count-row,.slope-rooms-stepper-container{align-items:center;display:flex;justify-content:space-between;padding:10px}.slope-rooms-stepper{font-size:18px;padding:0}.slope-guests-count-row.slope-padding-top{padding-top:20px}.slope-children-age{font-size:12px}#slope-widget p,#slope-widget table td{border:0!important}.slope-stepper-container .slope-room-label{padding:10px;font-size:16px;font-weight:700}@media (min-width:992px){.slp-responsive-layout.slope-block{display:flex;justify-content:space-between;min-height:auto;min-width:900px}.slp-responsive-layout .slope-horizontal-separator{display:none}.slp-responsive-layout .slope-guests-and-button-container{width:65%;padding-left:8px;display:flex;justify-content:space-between}.slp-responsive-layout .slope-reservation-dates{width:35%}.slp-responsive-layout .slope-vertical-divider{display:block}.slp-responsive-layout .slope-reservation-dates .slope-reservation-icon-container{width:60px}.slp-responsive-layout .slope-reservation-section-container,.slp-responsive-layout .slope-reservation-section-container.slope-submit-section{width:50%}.slp-responsive-layout .slope-guests-count-container{text-align:left}}
     1.slope-widgets-container{box-sizing:border-box}.slope-justify-flex-end{justify-content:flex-end}.slope-width-100{width:100%}.slope-block{border-radius:.2rem;border:1px solid rgba(0,0,0,.1);line-height:1;margin:0 auto;max-width:900px;padding:8px;position:relative}.slope-block *{box-sizing:border-box}.slope-block .slope-reservation-section-container{cursor:pointer!important;text-align:left;padding:10px;border-radius:6px;display:flex;align-items:center}.slope-block .slope-reservation-section-container.slope-highlight:hover{background-color:rgba(0,0,0,.1)}.slope-block .slope-reservation-section-container .slope-check-in-container{margin:auto}.slope-block input[type=number]{-webkit-appearance:none;appearance:none;background:0 0;border-radius:0;border:0;color:inherit;display:block;font:inherit;margin:0;outline:0;padding:0;width:auto}.slope-block label{display:block;font-size:14px;text-align:left}.slope-block{min-height:225px}.slope-reservation-dates{display:flex;justify-content:space-between;padding-right:8px}.slope-guests-and-button-container{z-index:10}.slope-block .slope-reservation-section-container .slope-guests-wrapper,.slope-reservation-section-container{width:100%}.slope-guests-count-container{width:100%;text-align:right}.slope-cancel-guests,.slope-save-guests{background:0 0;display:inline-block;text-align:center;width:49%}.slope-horizontal-separator{border-bottom:solid 1px rgba(0,0,0,.1);display:block;margin-bottom:10px;margin-top:10px}.slope-block .slope-check-out-wrapper{text-align:right}.slope-vertical-divider{display:none}.slope-reservation-dates .slope-reservation-icon-container{align-items:center;display:flex;justify-content:center;opacity:.4;width:20px}.dayContainer+.dayContainer{border-left:1px solid rgba(0,0,0,.1)}.slope-block .slope-rooms-count-container{padding-right:32px}.slope-guests-buttons-container{display:flex}.slope-block .slope-check-in-input,.slope-block .slope-check-out-input{border:0;height:0;left:0;padding:0;position:absolute;top:88px;visibility:hidden!important}.slope-block .slope-check-in-label,.slope-block .slope-check-out-label,.slope-block .slope-guests-label,.slope-block .slope-rooms-label{display:block!important;font-size:13px!important;height:15px!important;line-height:15px!important}.slope-block .slope-reservation-section-container .slope-guests-wrapper{white-space:nowrap;display:flex}.slope-block .slope-adults-count,.slope-block .slope-check-in-date,.slope-block .slope-check-out-date,.slope-block .slope-children-count,.slope-block .slope-guests-adults,.slope-block .slope-guests-children,.slope-block .slope-rooms-count{border-radius:.2rem;font-size:16px;line-height:20px;min-width:175px}.slope-block input[type=submit].slope-reservation-submit{border-radius:.2rem;font-size:14px!important;font-weight:500;line-height:20px;min-width:175px}.slope-stepper-container{animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1);border-radius:6px;border:1px solid rgba(0,0,0,.1);display:none;font-size:16px;line-height:16px;margin-top:10px;padding:10px;position:absolute;width:300px;z-index:9999}.slope-block input[type=text],.slope-stepper-container input[type=text]{border:0!important;cursor:default!important;font-size:inherit!important;margin-bottom:0!important;min-height:0!important;outline:0!important;padding:0!important}.slope-stepper-container input[type=text]{background-color:inherit!important}.slope-block button,.slope-block input[type=button],.slope-block input[type=reset],.slope-block input[type=submit],.slope-stepper-container button,.slope-stepper-container input[type=button],.slope-stepper-container input[type=reset],.slope-stepper-container input[type=submit]{border:0!important;cursor:pointer;font-family:inherit;font-size:inherit!important;margin-bottom:0!important;margin-top:0!important;min-height:30px!important;outline:0!important;padding:12px!important;text-transform:uppercase;transition:all .2s ease-in-out}.slope-block button:hover,.slope-block input[type=button]:hover,.slope-block input[type=reset]:hover,.slope-block input[type=submit]:hover,.slope-stepper-container button:hover,.slope-stepper-container input[type=button]:hover,.slope-stepper-container input[type=reset]:hover,.slope-stepper-container input[type=submit]:hover{opacity:.8}.slope-stepper-label{padding-bottom:1px}.slope-stepper-container input[type=number],.slope-stepper-container input[type=text]{width:auto}.slope-stepper-container .slope-stepper-value{text-align:center;margin:0;border:0;box-sizing:border-box;background:0 0!important}.slope-stepper-container .slope-decrement-button,.slope-stepper-container .slope-increment-button{align-items:center;background:0 0;border-radius:50%;cursor:pointer;display:flex;float:right;font-size:18px;font-weight:700;height:26px;justify-content:center;line-height:18px;margin:0!important;opacity:1;padding:0;text-align:center;text-decoration:none;transition:all .2s ease-in-out!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;width:26px}.slope-stepper-container .slope-stepper-value{width:44px!important}.slope-stepper-container .slope-guests-stepper,.slope-stepper-container .slope-rooms-stepper{display:flex}.slope-stepper-container .slope-horizontal-separator{width:100%;border-bottom:solid 1px rgba(0,0,0,.1);margin:10px 0;display:block!important}.slope-vertical-divider{border-left:1px solid rgba(0,0,0,.1);height:42px;margin-bottom:auto;margin-top:auto}.slope-guests-count-row,.slope-rooms-stepper-container{align-items:center;display:flex;justify-content:space-between;padding:10px}.slope-rooms-stepper{font-size:18px;padding:0}.slope-guests-count-row.slope-padding-top{padding-top:20px}.slope-children-age{font-size:12px}#slope-widget p,#slope-widget table td{border:0!important}.slope-stepper-container .slope-room-label{padding:10px;font-size:16px;font-weight:700}@media (min-width:992px){.slp-responsive-layout.slope-block{display:flex;justify-content:space-between;min-height:auto;min-width:900px}.slp-responsive-layout .slope-horizontal-separator{display:none}.slp-responsive-layout .slope-guests-and-button-container{width:65%;padding-left:8px;display:flex;justify-content:space-between}.slp-responsive-layout .slope-reservation-dates{width:35%}.slp-responsive-layout .slope-vertical-divider{display:block}.slp-responsive-layout .slope-reservation-dates .slope-reservation-icon-container{width:60px}.slp-responsive-layout .slope-reservation-section-container,.slp-responsive-layout .slope-reservation-section-container.slope-submit-section{width:50%}.slp-responsive-layout .slope-guests-count-container{text-align:left}}
    22#slope-promotions a.slp-button{padding:1.5rem .5rem;transition:all .2s ease-in-out;text-decoration:none}#slope-promotions a.slp-button:hover{opacity:.7}#slope-widget{font-family:inherit!important}table.slp{min-width:initial;font-family:inherit}table.slp td{font-family:inherit;text-align:left!important;word-break:normal}[id^=promotion-submit-].slp-button{font-family:inherit!important;font-weight:700;letter-spacing:inherit}
    33@keyframes slope-spin{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}.slope-promo-container{width:100%!important}#slp-arrow-icon{height:1rem}#slp-settings-border-radius-container{display:flex;gap:10px;align-items:center}.slp-promotion-card{flex:1 1 300px;border-radius:10px;margin-bottom:1rem;position:relative;min-width:280px;display:flex;flex-direction:column}.slp-loading-spinner{width:40px;height:40px;border:4px solid #f3f3f3;border-top:4px solid #3498db;border-radius:50%;animation:slope-spin 2s linear infinite}.slp-error-message,.slp-loading-indicator{display:flex;justify-content:center;align-items:center;margin:auto}.slp-loading-indicator{padding:20px;width:100%}.slp-error-message{border-radius:10px;background:#eee;padding:30px;text-align:center}.slp-promotion-container{flex:1;display:flex;flex-direction:column;width:fit-content;max-width:100%;overflow:hidden}.slp-promotion-image{background-size:cover;background-repeat:no-repeat;background-position:center;padding:16px;min-height:180px}.slp-promotion-expiration-date{top:1rem;left:1rem;z-index:2;padding:4px 8px;border-radius:10px;font-size:.75rem;font-weight:700;width:fit-content}.slp-promotion-title{font-size:clamp(1rem,2.5vw,1.25rem);font-weight:700;line-height:1.3;margin-bottom:clamp(.5rem,2vw,1rem)}.slp-promotion-description{font-size:clamp(.875rem,2vw,1rem);line-height:1.5;-webkit-box-orient:vertical;white-space:normal;display:-webkit-box;overflow:hidden;text-overflow:ellipsis;max-width:100%;word-wrap:break-word}.slp-promotion-actions{display:flex;flex-direction:column;gap:.5rem;margin-top:auto}.slp-see-details{font-size:.9rem;align-self:flex-start;font-weight:700;display:flex;align-items:center;margin-bottom:.5rem;gap:.5rem}.slp-reserve-button{display:block;padding:.75rem 0;font-size:1rem;font-weight:700;border-radius:10px;text-decoration:none;text-align:center}.slp-modal,.slp-modal-overlay{z-index:1000;top:0;left:0;width:100%;height:100%}.slp-modal{position:fixed;background-color:rgba(0,0,0,.4);opacity:0;visibility:hidden;transition:opacity .3s ease,visibility .3s ease}.slp-modal-overlay{background-image:linear-gradient(to bottom,transparent 0,#d1d2da 250px,#d1d2da,#d1d2da);border-radius:10px;position:absolute}.slp-modal-container{background-size:100%,cover;background-repeat:no-repeat;background-position:top,center;padding:clamp(8px,2vw,12px);border-radius:10px;width:min(80vw,600px);z-index:1001;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.slp-close-modal-button{position:absolute;right:1rem;line-height:.5;top:1rem;font-size:24px;cursor:pointer;z-index:1003;border-radius:50%;padding:.5rem}.slp-modal-promotion-container{border-radius:10px;position:relative;z-index:1001;margin-top:clamp(10vh,16vh,24vh)}.slp-modal-promotion-details{max-width:100%;word-wrap:break-word;max-height:25vh;overflow-y:auto}.slp-modal-lodgings,.slp-modal-promotion-details{font-size:clamp(.875rem,2vw,1rem);margin-bottom:1rem;line-height:1.5}.slp-modal-visible{opacity:1;visibility:visible}.slp-modal-hidden{opacity:0;visibility:hidden}@media screen and (max-width:768px){.slp-modal-promotion-details{max-height:50vh}.slp-modal-container{width:90vw;background-size:150%,cover}}
  • slope-widgets/trunk/includes/DBUpgrader.php

    r3289147 r3385288  
    11<?php
    22declare(strict_types=1);
     3
     4namespace SlopeWidgets;
    35
    46class DBUpgrader
  • slope-widgets/trunk/includes/admin/GlobalSettings.php

    r3294812 r3385288  
    22declare(strict_types=1);
    33
    4 use validation\rules\Uuid;
    5 use validation\Validator;
     4namespace SlopeWidgets\Admin;
     5
     6use SlopeWidgets\Settings\GlobalSettingsProvider;
     7use SlopeWidgets\Validation\InputSanitizer;
     8use SlopeWidgets\Validation\Rules\Uuid;
     9use SlopeWidgets\Validation\Validator;
    610
    711class GlobalSettings
     
    6973            [new Uuid()],
    7074            __('L\'ID Struttura non è valido.', 'slope-widgets'),
    71             null
     75            // Reuse the existing establishment ID as the default value (if any)
     76            GlobalSettingsProvider::getEstablishmentId()
    7277        );
    7378
    7479        $validatedData = $validator->validate($input);
    75         // NOTE: `book_target` is a checkbox and it is not present in the input if it is not checked. So we need to
     80
     81        // WARNING: Only validated data will be saved. Fields not included in the validation or failing validation will
     82        // be omitted. As `book_target` is a checkbox it is not present in the input if it is not checked. So we need to
    7683        // set it to false if it is not present in the input.
    77         // TODO: Maybe we should build a normalizer to ensure that the data stored in the settings is in the correct
    78         //  format (in this case a boolean).
    79         $validatedData['book_target'] = !empty($input['book_target'])
    80             && is_string($input['book_target'])
    81             && trim($input['book_target']) !== '';
     84        $validatedData['book_target'] = InputSanitizer::normalizeCheckbox($input, 'book_target');
    8285
    8386        if ($validator->hasErrors()) {
  • slope-widgets/trunk/includes/admin/Promotions.php

    r3294812 r3385288  
    11<?php
    22
    3 use validation\rules\HexColor;
    4 use validation\rules\InArray;
    5 use validation\rules\Range;
    6 use validation\Validator;
     3namespace SlopeWidgets\Admin;
     4
     5use SlopeWidgets\Enums\CardLayout;
     6use SlopeWidgets\Enums\FontWeight;
     7use SlopeWidgets\Enums\TextAlignment;
     8use SlopeWidgets\Helpers\LanguageResolver;
     9use SlopeWidgets\Settings\GlobalSettingsProvider;
     10use SlopeWidgets\Settings\PromotionsSettingsProvider;
     11use SlopeWidgets\Validation\Rules\HexColor;
     12use SlopeWidgets\Validation\Rules\InArray;
     13use SlopeWidgets\Validation\Rules\Range;
     14use SlopeWidgets\Validation\Validator;
     15use SlopeWidgets\Validation\InputSanitizer;
    716
    817class Promotions
     
    181190    {
    182191        include(SLOPE_WIDGETS_PATH . "includes/pages/promotions/partials/style-section.php");
    183         include(SLOPE_WIDGETS_PATH . "includes/pages/promotions/partials//layout-section.php");
     192        include(SLOPE_WIDGETS_PATH . "includes/pages/promotions/partials/layout-section.php");
    184193    }
    185194
     
    296305
    297306        $validatedData = $validator->validate($input);
    298         // TODO: Maybe we should build a normalizer to ensure that the data stored in the settings is in the correct
    299         //  format (in this case a boolean).
    300         // NOTE: `hide_description` is a checkbox and it is not present in the input if it is not checked. So we need to
    301         // set it to false if it is not present in the input.
    302         $validatedData['hide_description'] = !empty($input['hide_description'])
    303             && is_string($input['hide_description'])
    304             && trim($input['hide_description']) !== '';
     307
     308        // WARNING: Only validated data will be saved. Fields not included in the validation or failing validation will
     309        // be omitted. As `hide_description` is a checkbox it is not present in the input if it is not checked.
     310        // So we need to set it to false if it is not present in the input.
     311        $validatedData['hide_description'] = InputSanitizer::normalizeCheckbox($validatedData, 'hide_description');
    305312
    306313        if ($validator->hasErrors()) {
  • slope-widgets/trunk/includes/admin/WelcomePage.php

    r3289147 r3385288  
    11<?php
     2declare(strict_types=1);
     3
     4namespace SlopeWidgets\Admin;
    25
    36class WelcomePage
  • slope-widgets/trunk/includes/enums/AbstractEnum.php

    r3289147 r3385288  
    11<?php
     2declare(strict_types=1);
     3
     4namespace SlopeWidgets\Enums;
    25
    36/**
  • slope-widgets/trunk/includes/enums/CardLayout.php

    r3289147 r3385288  
    11<?php
     2declare(strict_types=1);
     3
     4namespace SlopeWidgets\Enums;
    25
    36final class CardLayout extends AbstractEnum
  • slope-widgets/trunk/includes/enums/FontWeight.php

    r2714664 r3385288  
    11<?php
     2declare(strict_types=1);
     3
     4namespace SlopeWidgets\Enums;
    25
    36/**
  • slope-widgets/trunk/includes/enums/TextAlignment.php

    r2714664 r3385288  
    11<?php
     2declare(strict_types=1);
     3
     4namespace SlopeWidgets\Enums;
    25
    36/**
  • slope-widgets/trunk/includes/helpers/LanguageResolver.php

    r3289147 r3385288  
    11<?php
    22declare(strict_types=1);
     3
     4namespace SlopeWidgets\Helpers;
    35
    46class LanguageResolver
  • slope-widgets/trunk/includes/pages/global-settings/partials/form.php

    r3294812 r3385288  
    11<?php
     2use SlopeWidgets\Settings\GlobalSettingsProvider;
     3
    24    $uuid = GlobalSettingsProvider::getEstablishmentId();
    35    $openLinksOnANewTabAttribute = GlobalSettingsProvider::shouldOpenLinksOnANewTab() ? ' checked="checked" ' : '';
  • slope-widgets/trunk/includes/pages/promotions/partials/layout-section.php

    r3294812 r3385288  
    11<?php
     2use SlopeWidgets\Settings\PromotionsSettingsProvider;
     3use SlopeWidgets\Enums\CardLayout;
     4
    25$promotionsPerRow = PromotionsSettingsProvider::getNumberOfPromotionsPerRow();
    36?>
  • slope-widgets/trunk/includes/pages/promotions/partials/style-section.php

    r3289147 r3385288  
    11<?php
     2use SlopeWidgets\Settings\PromotionsSettingsProvider;
     3use SlopeWidgets\Enums\FontWeight;
     4use SlopeWidgets\Enums\TextAlignment;
     5
    26$borderRadius = PromotionsSettingsProvider::getCardBorderRadius();
    37$radiusOptions = [0, 4, 8, 12, 16, 24];
  • slope-widgets/trunk/includes/settings/GlobalSettingsProvider.php

    r3289147 r3385288  
    11<?php
     2declare(strict_types=1);
     3
     4namespace SlopeWidgets\Settings;
    25
    36final class GlobalSettingsProvider
  • slope-widgets/trunk/includes/settings/LegacyPromotionsSettingProvider.php

    r3289147 r3385288  
    11<?php
     2
     3namespace SlopeWidgets\Settings;
     4
     5use SlopeWidgets\Enums\FontWeight;
     6use SlopeWidgets\Enums\TextAlignment;
    27
    38/**
  • slope-widgets/trunk/includes/settings/PromotionsSettingsProvider.php

    r3289147 r3385288  
    11<?php
     2declare(strict_types=1);
     3
     4namespace SlopeWidgets\Settings;
     5
     6use SlopeWidgets\Enums\CardLayout;
     7use SlopeWidgets\Enums\FontWeight;
     8use SlopeWidgets\Enums\TextAlignment;
    29
    310/**
     
    5360    public static function getCardBorderRadius(): int
    5461    {
    55         return self::get('container_border_radius', self::DEFAULT_CARD_BORDER_RADIUS);
     62        return (int) self::get('container_border_radius', self::DEFAULT_CARD_BORDER_RADIUS);
    5663    }
    5764
     
    8390    public static function getTitleSize(): int
    8491    {
    85         return self::get('title_size', self::DEFAULT_TITLE_SIZE);
     92        return (int) self::get('title_size', self::DEFAULT_TITLE_SIZE);
    8693    }
    8794
    8895    public static function getDescriptionFontSize(): int
    8996    {
    90         return self::get('description_font_size', self::DEFAULT_DESCRIPTION_SIZE);
     97        return (int) self::get('description_font_size', self::DEFAULT_DESCRIPTION_SIZE);
    9198    }
    9299
     
    103110    public static function getNumberOfPromotionsPerRow(): int
    104111    {
    105         return self::get('number_of_promotions_per_row', self::DEFAULT_PROMOTIONS_PER_ROW);
     112        return (int) self::get('number_of_promotions_per_row', self::DEFAULT_PROMOTIONS_PER_ROW);
    106113    }
    107114
    108115    public static function getDescriptionMaxRows(): int
    109116    {
    110         return self::get('description_max_rows', self::DEFAULT_DESCRIPTION_MAX_ROWS);
     117        return (int) self::get('description_max_rows', self::DEFAULT_DESCRIPTION_MAX_ROWS);
    111118    }
    112119
  • slope-widgets/trunk/includes/settings/ReservationsSettingsProvider.php

    r3289147 r3385288  
    11<?php
     2
     3namespace SlopeWidgets\Settings;
    24
    35final class ReservationsSettingsProvider
     
    79    const DEFAULT_MINIMUM_SUGGESTED_STAY = '1';
    810    const DEFAULT_MAXIMUM_AGE_FOR_CHILDREN = '13';
     11    const DEFAULT_MINIMUM_AGE_FOR_CHILDREN = '0';
    912    const DEFAULT_CALL_TO_ACTION_BUTTON_ITALIAN_LABEL = 'Prenota ora';
    1013    const DEFAULT_CALL_TO_ACTION_BUTTON_ENGLISH_LABEL = 'Book now';
     
    4245    {
    4346        return self::get('children_age_max', self::DEFAULT_MAXIMUM_AGE_FOR_CHILDREN);
     47    }
     48
     49    public static function getMinimumAgeForChildren()
     50    {
     51        return self::get('children_age_min', self::DEFAULT_MINIMUM_AGE_FOR_CHILDREN);
    4452    }
    4553
  • slope-widgets/trunk/js/slope-widgets.js

    r3289147 r3385288  
    77    slopeDateRangePicker.create(".slope-check-in-input", ".slope-check-out-input", widget, index, $).init($);
    88    new SlopeGuestsWrapper($(widget).find(".slope-guests-wrapper")).init($);
    9   }); //Border_radius card Promotions
    10 
    11   var slopeWidgetBorderRadius = $("#slope-widgets-config").data("range_button");
    12 
    13   if (slopeWidgetBorderRadius != "") {
    14     $(".slp-column").css("border-radius:", slopeWidgetBorderRadius);
    15   } //Title size Promotions
    16 
    17 
    18   var slopeWidgetTitleSize = $("#slope-widgets-config").data("title_size");
    19 
    20   if (slopeWidgetTitleSize != "") {
    21     $("p.slp-column").css("font-size:", slopeWidgetTitleSize);
    22   }
     9  });
    2310}); // Packages and promotions
    2411
  • slope-widgets/trunk/languages/slope-widgets-en_US.po

    r3289147 r3385288  
    22msgstr ""
    33"Project-Id-Version: Slope Widgets\n"
    4 "POT-Creation-Date: 2025-04-28 14:11+0200\n"
    5 "PO-Revision-Date: 2025-04-28 14:11+0200\n"
     4"POT-Creation-Date: 2025-10-17 16:17+0200\n"
     5"PO-Revision-Date: 2025-10-17 16:17+0200\n"
    66"Last-Translator: \n"
    77"Language-Team: \n"
     
    1111"Content-Transfer-Encoding: 8bit\n"
    1212"Plural-Forms: nplurals=2; plural=(n != 1);\n"
    13 "X-Generator: Poedit 3.6\n"
     13"X-Generator: Poedit 3.8\n"
    1414"X-Poedit-Basepath: ..\n"
    1515"X-Poedit-WPHeader: slope-widgets.php\n"
    1616"X-Poedit-SourceCharset: UTF-8\n"
    17 "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
    18 "esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
    19 "_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
     17"X-Poedit-KeywordsList: "
     18"__;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
    2019"X-Poedit-SearchPath-0: .\n"
    2120"X-Poedit-SearchPathExcluded-0: *.js\n"
    2221
    23 #: includes/admin/GlobalSettings.php:20
     22#: includes/admin/GlobalSettings.php:24
    2423msgid "Impostazioni di Slope Widgets"
    2524msgstr "Slope Widgets Settings"
    2625
    27 #: includes/admin/GlobalSettings.php:66
     26#: includes/admin/GlobalSettings.php:74
    2827msgid "L'ID Struttura non è valido."
    2928msgstr "Invalid Establishment ID."
    3029
    31 #: includes/admin/Promotions.php:78
     30#: includes/admin/Promotions.php:93
    3231msgid "Id Struttura non impostato"
    3332msgstr "Establishment ID not setted"
    3433
    35 #: includes/admin/Promotions.php:189
     34#: includes/admin/Promotions.php:209 includes/admin/Reservations.php:392
    3635msgid "Una delle proprietà non è valida, controllare i valori e riprovare"
    3736msgstr "One of the properties is invalid, check the values ​​and try again"
    3837
    3938#: includes/pages/global-settings/index.php:14
    40 #: includes/pages/promotions/index.php:35 slope-promotions-legacy.php:262
    41 #: slope-reservations.php:34
     39#: includes/pages/promotions/index.php:35
     40#: includes/pages/reservations/index.php:21 slope-promotions-legacy.php:268
    4241msgid "Salva modifiche"
    4342msgstr "Save Changes"
    4443
    45 #: includes/pages/global-settings/partials/form.php:8
     44#: includes/pages/global-settings/partials/form.php:10
    4645msgid ""
    4746"Slope Widgets funziona con gli shortcode. Se non sai cosa sono e come "
     
    5150"how they work, check out the"
    5251
    53 #: includes/pages/global-settings/partials/form.php:8
     52#: includes/pages/global-settings/partials/form.php:10
    5453msgid "documentazione"
    5554msgstr "documentation"
    5655
    57 #: includes/pages/global-settings/partials/form.php:8
     56#: includes/pages/global-settings/partials/form.php:10
    5857msgid "di WordPress."
    5958msgstr "of WordPress."
    6059
    61 #: includes/pages/global-settings/partials/form.php:11
     60#: includes/pages/global-settings/partials/form.php:13
    6261msgid ""
    6362"Se il sito web della tua struttura è multilingua e preferisci mostrare il "
     
    7170"pages."
    7271
    73 #: includes/pages/global-settings/partials/form.php:14
     72#: includes/pages/global-settings/partials/form.php:16
    7473msgid ""
    7574"Le lingue supportate dalla barra delle prenotazioni sono italiano, inglese, "
     
    7978"German (it, en, fr, de)."
    8079
    81 #: includes/pages/global-settings/partials/form.php:17
     80#: includes/pages/global-settings/partials/form.php:19
    8281msgid "Shortcode supportati:"
    8382msgstr "Supported shortcodes:"
    8483
    85 #: includes/pages/global-settings/partials/form.php:20
     84#: includes/pages/global-settings/partials/form.php:22
    8685msgid ""
    8786"mostra widget e booking engine in base alla lingua del browser del "
     
    9190"English if the language is not supported."
    9291
    93 #: includes/pages/global-settings/partials/form.php:21
     92#: includes/pages/global-settings/partials/form.php:23
    9493msgid "mostra widget e booking engine sempre in inglese."
    9594msgstr "shows widget and booking engine always in English."
    9695
    97 #: includes/pages/global-settings/partials/form.php:22
     96#: includes/pages/global-settings/partials/form.php:24
    9897msgid "mostra widget e booking engine sempre in italiano."
    9998msgstr "shows widget and booking engine always in Italian."
    10099
    101 #: includes/pages/global-settings/partials/form.php:23
     100#: includes/pages/global-settings/partials/form.php:25
    102101msgid "mostra widget e booking engine sempre in francese."
    103102msgstr "shows widget and booking engine always in French."
    104103
    105 #: includes/pages/global-settings/partials/form.php:24
     104#: includes/pages/global-settings/partials/form.php:26
    106105msgid "mostra widget e booking engine sempre in tedesco."
    107106msgstr "shows widget and booking engine always in German."
    108107
    109 #: includes/pages/global-settings/partials/form.php:25
     108#: includes/pages/global-settings/partials/form.php:27
    110109msgid ""
    111110"mostra le promozioni in base alla lingua del browser del visitatore, o in "
     
    115114"English if the language is not supported."
    116115
    117 #: includes/pages/global-settings/partials/form.php:26
     116#: includes/pages/global-settings/partials/form.php:28
    118117msgid "mostra le promozioni sempre in inglese."
    119118msgstr "displays promotions always in English."
    120119
    121 #: includes/pages/global-settings/partials/form.php:27
     120#: includes/pages/global-settings/partials/form.php:29
    122121msgid "mostra le promozioni sempre in italiano."
    123122msgstr "displays promotions always in Italian."
    124123
    125 #: includes/pages/global-settings/partials/form.php:28
     124#: includes/pages/global-settings/partials/form.php:30
    126125msgid "mostra le promozioni sempre in francese."
    127126msgstr "displays promotions always in French."
    128127
    129 #: includes/pages/global-settings/partials/form.php:29
     128#: includes/pages/global-settings/partials/form.php:31
    130129msgid "mostra le promozioni sempre in tedesco."
    131130msgstr "displays promotions always in German."
    132131
    133 #: includes/pages/global-settings/partials/form.php:35
     132#: includes/pages/global-settings/partials/form.php:37
    134133msgid "Impostazioni Generali"
    135134msgstr "Settings"
    136135
    137 #: includes/pages/global-settings/partials/form.php:38
     136#: includes/pages/global-settings/partials/form.php:40
    138137msgid "ID Struttura Slope"
    139138msgstr "Slope Structure ID"
    140139
    141 #: includes/pages/global-settings/partials/form.php:44
     140#: includes/pages/global-settings/partials/form.php:46
    142141msgid "Inserisci qui l'identificativo della tua struttura"
    143142msgstr "Please enter your structure ID here"
    144143
    145 #: includes/pages/global-settings/partials/form.php:46
     144#: includes/pages/global-settings/partials/form.php:48
    146145msgid "Hai acquistato Slope ma non hai ancora l'ID?"
    147146msgstr "Did you buy Slope but didn’t receive the ID?"
    148147
    149 #: includes/pages/global-settings/partials/form.php:47
     148#: includes/pages/global-settings/partials/form.php:49
    150149msgid "Richiesta ID Struttura da Slope Widgets WP Plugin"
    151150msgstr "Hotel UUID Request from Slope Widgets WP Plugin"
    152151
    153 #: includes/pages/global-settings/partials/form.php:48
     152#: includes/pages/global-settings/partials/form.php:50
    154153msgid "Richiedilo ora"
    155154msgstr "Ask for it now"
    156155
    157 #: includes/pages/global-settings/partials/form.php:53
     156#: includes/pages/global-settings/partials/form.php:55
    158157msgid "Apri il booking engine in una nuova scheda"
    159158msgstr "Open the Booking Engine in a new tab"
    160159
    161 #: includes/pages/global-settings/partials/form.php:58
     160#: includes/pages/global-settings/partials/form.php:64
    162161msgid ""
    163162"Selezionando questa casella, il booking engine verrà aperto in una nuova "
     
    170169msgstr "Customize the new Slope promotions widget. Use the "
    171170
    172 #: includes/pages/promotions/index.php:12 slope-promotions-legacy.php:25
    173 #: slope-reservations.php:21
     171#: includes/pages/promotions/index.php:12
     172#: includes/pages/reservations/index.php:8 slope-promotions-legacy.php:31
    174173msgid "per inserirlo dove vuoi!"
    175174msgstr "to insert it into pages!"
    176175
    177 #: includes/pages/promotions/index.php:16 slope-promotions-legacy.php:27
    178 #: slope-reservations.php:24
     176#: includes/pages/promotions/index.php:16
     177#: includes/pages/reservations/index.php:11 slope-promotions-legacy.php:33
    179178msgid "Per modificare il tuo ID struttura "
    180179msgstr "To change your structure ID "
    181180
    182 #: includes/pages/promotions/index.php:17 slope-promotions-legacy.php:27
    183 #: slope-reservations.php:25
     181#: includes/pages/promotions/index.php:17
     182#: includes/pages/reservations/index.php:12 slope-promotions-legacy.php:33
    184183msgid "clicca qui"
    185184msgstr "click here"
    186185
    187 #: includes/pages/promotions/index.php:25 slope-promotions-legacy.php:252
     186#: includes/pages/promotions/index.php:25 slope-promotions-legacy.php:258
    188187msgid "Stile"
    189188msgstr "Style"
    190189
    191190#: includes/pages/promotions/index.php:28
    192 #: includes/pages/promotions/partials/layout-section.php:11
    193 #: slope-promotions-legacy.php:255
     191#: includes/pages/promotions/partials/layout-section.php:14
     192#: slope-promotions-legacy.php:261
    194193msgid "Layout"
    195194msgstr "Layout"
    196195
    197 #: includes/pages/promotions/partials/layout-section.php:16
     196#: includes/pages/promotions/partials/layout-section.php:19
    198197msgid "Orientamento scheda"
    199198msgstr "Card orientation"
    200199
    201 #: includes/pages/promotions/partials/layout-section.php:23
     200#: includes/pages/promotions/partials/layout-section.php:26
    202201msgid "Orizzontale"
    203202msgstr "Horizontal"
    204203
    205 #: includes/pages/promotions/partials/layout-section.php:24
     204#: includes/pages/promotions/partials/layout-section.php:27
    206205msgid "Verticale"
    207206msgstr "Vertical"
    208207
    209 #: includes/pages/promotions/partials/layout-section.php:39
     208#: includes/pages/promotions/partials/layout-section.php:42
    210209msgid "Numero di promozioni per riga"
    211210msgstr "Number of promotions per line"
    212211
    213 #: includes/pages/promotions/partials/layout-section.php:70
     212#: includes/pages/promotions/partials/layout-section.php:78
    214213msgid ""
    215214"Specifica il numero di promozioni massime da mostrare in ogni riga in schermi "
     
    221220"columns per row."
    222221
    223 #: includes/pages/promotions/partials/layout-section.php:82
     222#: includes/pages/promotions/partials/layout-section.php:90
    224223msgid "Descrizioni"
    225224msgstr "Descriptions"
    226225
    227 #: includes/pages/promotions/partials/layout-section.php:87
    228 #: slope-promotions-legacy.php:40
     226#: includes/pages/promotions/partials/layout-section.php:95
     227#: slope-promotions-legacy.php:46
    229228msgid "Nascondi descrizione delle promozioni"
    230229msgstr "Hide promotions description"
    231230
    232 #: includes/pages/promotions/partials/layout-section.php:96
     231#: includes/pages/promotions/partials/layout-section.php:105
    233232msgid "Massimo di righe per la descrizione delle promozioni"
    234233msgstr "Maximum number of lines for promotion description"
    235234
    236 #: includes/pages/promotions/partials/promotionsList.ajax.php:8
     235#: includes/pages/promotions/partials/promotionsList.ajax.php:10
    237236msgid "Non sono presenti promozioni disponibili."
    238237msgstr "No promotions available."
    239238
    240 #: includes/pages/promotions/partials/style-section.php:13
    241 #: slope-promotions-legacy.php:145
     239#: includes/pages/promotions/partials/style-section.php:17
     240#: slope-promotions-legacy.php:151
    242241msgid "Sinistra"
    243242msgstr "Left"
    244243
    245 #: includes/pages/promotions/partials/style-section.php:14
    246 #: slope-promotions-legacy.php:146
     244#: includes/pages/promotions/partials/style-section.php:18
     245#: slope-promotions-legacy.php:152
    247246msgid "Centro"
    248247msgstr "Center"
    249248
    250 #: includes/pages/promotions/partials/style-section.php:15
    251 #: slope-promotions-legacy.php:147
     249#: includes/pages/promotions/partials/style-section.php:19
     250#: slope-promotions-legacy.php:153
    252251msgid "Destra"
    253252msgstr "Right"
    254253
    255 #: includes/pages/promotions/partials/style-section.php:20
    256 #: slope-promotions-legacy.php:124 slope-promotions-legacy.php:184
     254#: includes/pages/promotions/partials/style-section.php:24
     255#: slope-promotions-legacy.php:130 slope-promotions-legacy.php:190
    257256msgid "Leggero"
    258257msgstr "Light"
    259258
    260 #: includes/pages/promotions/partials/style-section.php:21
    261 #: slope-promotions-legacy.php:125 slope-promotions-legacy.php:185
     259#: includes/pages/promotions/partials/style-section.php:25
     260#: slope-promotions-legacy.php:131 slope-promotions-legacy.php:191
    262261msgid "Normale"
    263262msgstr "Regular"
    264263
    265 #: includes/pages/promotions/partials/style-section.php:22
    266 #: slope-promotions-legacy.php:126 slope-promotions-legacy.php:186
     264#: includes/pages/promotions/partials/style-section.php:26
     265#: slope-promotions-legacy.php:132 slope-promotions-legacy.php:192
    267266msgid "Medio"
    268267msgstr "Medium"
    269268
    270 #: includes/pages/promotions/partials/style-section.php:23
    271 #: slope-promotions-legacy.php:127 slope-promotions-legacy.php:187
     269#: includes/pages/promotions/partials/style-section.php:27
     270#: slope-promotions-legacy.php:133 slope-promotions-legacy.php:193
    272271msgid "Grassetto Leggero"
    273272msgstr "Semi-Bold"
    274273
    275 #: includes/pages/promotions/partials/style-section.php:24
    276 #: slope-promotions-legacy.php:128 slope-promotions-legacy.php:188
     274#: includes/pages/promotions/partials/style-section.php:28
     275#: slope-promotions-legacy.php:134 slope-promotions-legacy.php:194
    277276msgid "Grassetto"
    278277msgstr "Bold"
    279278
    280 #: includes/pages/promotions/partials/style-section.php:38
     279#: includes/pages/promotions/partials/style-section.php:42
    281280msgid "Contenitore"
    282281msgstr "Container"
    283282
    284 #: includes/pages/promotions/partials/style-section.php:43
    285 #: slope-promotions-legacy.php:65
     283#: includes/pages/promotions/partials/style-section.php:47
     284#: slope-promotions-legacy.php:71
    286285msgid "Colore dello sfondo"
    287286msgstr "Background color"
    288287
    289 #: includes/pages/promotions/partials/style-section.php:51
    290 #: slope-promotions-legacy.php:92
     288#: includes/pages/promotions/partials/style-section.php:55
     289#: slope-promotions-legacy.php:98
    291290msgid "Raggio dei bordi"
    292291msgstr "Border radius"
    293292
    294 #: includes/pages/promotions/partials/style-section.php:67
     293#: includes/pages/promotions/partials/style-section.php:71
    295294msgid ""
    296295"Seleziona il raggio di arrotondamento degli angoli delle schede promozioni. "
     
    300299"radius, the more rounded the corners will be."
    301300
    302 #: includes/pages/promotions/partials/style-section.php:78
     301#: includes/pages/promotions/partials/style-section.php:82
    303302msgid "Titolo"
    304303msgstr "Title"
    305304
    306 #: includes/pages/promotions/partials/style-section.php:84
    307 #: includes/pages/promotions/partials/style-section.php:159
    308 #: includes/pages/promotions/partials/style-section.php:243
    309 #: includes/sections/slope-reservations/settings-section.php:67
    310 #: slope-promotions-legacy.php:104 slope-promotions-legacy.php:174
    311 #: slope-promotions-legacy.php:206
     305#: includes/pages/promotions/partials/style-section.php:88
     306#: includes/pages/promotions/partials/style-section.php:163
     307#: includes/pages/promotions/partials/style-section.php:249
     308#: includes/pages/reservations/partials/form.php:68
     309#: slope-promotions-legacy.php:110 slope-promotions-legacy.php:180
     310#: slope-promotions-legacy.php:212
    312311msgid "Colore del testo"
    313312msgstr "Text color"
    314313
    315 #: includes/pages/promotions/partials/style-section.php:94
    316 #: includes/pages/promotions/partials/style-section.php:169
    317 #: slope-promotions-legacy.php:113
     314#: includes/pages/promotions/partials/style-section.php:98
     315#: includes/pages/promotions/partials/style-section.php:173
     316#: slope-promotions-legacy.php:119
    318317msgid "Dimensione del testo"
    319318msgstr "Text size"
    320319
    321 #: includes/pages/promotions/partials/style-section.php:111
    322 #: includes/pages/promotions/partials/style-section.php:186
    323 #: includes/pages/promotions/partials/style-section.php:253
     320#: includes/pages/promotions/partials/style-section.php:115
     321#: includes/pages/promotions/partials/style-section.php:190
     322#: includes/pages/promotions/partials/style-section.php:259
    324323msgid "Peso del testo"
    325324msgstr "Text weight"
    326325
    327 #: includes/pages/promotions/partials/style-section.php:129
     326#: includes/pages/promotions/partials/style-section.php:133
    328327msgid "Allineamento del titolo"
    329328msgstr "Title alignment"
    330329
    331 #: includes/pages/promotions/partials/style-section.php:152
     330#: includes/pages/promotions/partials/style-section.php:156
    332331msgid "Descrizione"
    333332msgstr "Description"
    334333
    335 #: includes/pages/promotions/partials/style-section.php:204
    336 #: slope-promotions-legacy.php:149
     334#: includes/pages/promotions/partials/style-section.php:208
     335#: slope-promotions-legacy.php:155
    337336msgid "Allineamento del testo"
    338337msgstr "Text alignment"
    339338
    340 #: includes/pages/promotions/partials/style-section.php:225
    341 #: includes/sections/slope-reservations/settings-section.php:20
     339#: includes/pages/promotions/partials/style-section.php:231
     340#: includes/pages/reservations/partials/form.php:21
    342341msgid "Pulsante"
    343342msgstr "Button"
    344343
    345 #: includes/pages/promotions/partials/style-section.php:232
    346 #: includes/sections/slope-reservations/settings-section.php:58
    347 #: slope-promotions-legacy.php:165
     344#: includes/pages/promotions/partials/style-section.php:238
     345#: includes/pages/reservations/partials/form.php:59
     346#: slope-promotions-legacy.php:171
    348347msgid "Colore di sfondo"
    349348msgstr "Background color"
     349
     350#: includes/pages/reservations/index.php:6
     351msgid "Personalizza il widget di prenotazione di Slope. Usa lo "
     352msgstr "Customize the Slope reservations widget. Use the "
     353
     354#: includes/pages/reservations/partials/form.php:24
     355msgid "Testo del pulsante in italiano"
     356msgstr "Button label in Italian"
     357
     358#: includes/pages/reservations/partials/form.php:27
     359msgid "Es: Prenota"
     360msgstr "Eg: Prenota"
     361
     362#: includes/pages/reservations/partials/form.php:30
     363msgid "Testo del pulsante in inglese"
     364msgstr "Button label in English"
     365
     366#: includes/pages/reservations/partials/form.php:32
     367msgid "Es: Book now"
     368msgstr "Eg: Book now"
     369
     370#: includes/pages/reservations/partials/form.php:35
     371msgid "Testo del pulsante in francese"
     372msgstr "Button label in French"
     373
     374#: includes/pages/reservations/partials/form.php:37
     375msgid "Es: Réserver"
     376msgstr "Eg: Réserver"
     377
     378#: includes/pages/reservations/partials/form.php:40
     379msgid "Testo del pulsante in tedesco"
     380msgstr "Button label in German"
     381
     382#: includes/pages/reservations/partials/form.php:42
     383msgid "Es: Buchen"
     384msgstr "Eg: Buchen"
     385
     386#: includes/pages/reservations/partials/form.php:45
     387msgid "Testo del pulsante in grassetto"
     388msgstr "Bold button text"
     389
     390#: includes/pages/reservations/partials/form.php:54
     391msgid "Aspetto"
     392msgstr "Style"
     393
     394#: includes/pages/reservations/partials/form.php:74
     395msgid "Mostra selezione bambini"
     396msgstr "Show children select field"
     397
     398#: includes/pages/reservations/partials/form.php:79
     399msgid "Visualizza il widget su due righe"
     400msgstr "Display the widget on two rows"
     401
     402#: includes/pages/reservations/partials/form.php:90
     403msgid "Filtri"
     404msgstr "Filters"
     405
     406#: includes/pages/reservations/partials/form.php:93
     407msgid "Età minima dei bambini (in anni)"
     408msgstr "Minimum children age (years)"
     409
     410#: includes/pages/reservations/partials/form.php:95
     411msgid "Es: 0"
     412msgstr "Eg: 0"
     413
     414#: includes/pages/reservations/partials/form.php:98
     415msgid "Età massima dei bambini (in anni)"
     416msgstr "Maximum children age (years)"
     417
     418#: includes/pages/reservations/partials/form.php:100
     419msgid "Es: 12"
     420msgstr "Eg: 12"
     421
     422#: includes/pages/reservations/partials/form.php:103
     423msgid "Soggiorno minimo suggerito"
     424msgstr "Minimum stay suggested"
     425
     426#: includes/pages/reservations/partials/form.php:105
     427msgid "Es: 3"
     428msgstr "Eg: 3"
    350429
    351430#: includes/pages/welcome/index.php:6
     
    404483msgstr "Submit"
    405484
    406 #: includes/sections/slope-reservations/settings-section.php:23
    407 msgid "Testo del pulsante in italiano"
    408 msgstr "Button label in Italian"
    409 
    410 #: includes/sections/slope-reservations/settings-section.php:26
    411 msgid "Es: Prenota"
    412 msgstr "Eg: Prenota"
    413 
    414 #: includes/sections/slope-reservations/settings-section.php:29
    415 msgid "Testo del pulsante in inglese"
    416 msgstr "Button label in English"
    417 
    418 #: includes/sections/slope-reservations/settings-section.php:31
    419 msgid "Es: Book now"
    420 msgstr "Eg: Book now"
    421 
    422 #: includes/sections/slope-reservations/settings-section.php:34
    423 msgid "Testo del pulsante in francese"
    424 msgstr "Button label in French"
    425 
    426 #: includes/sections/slope-reservations/settings-section.php:36
    427 msgid "Es: Réserver"
    428 msgstr "Eg: Réserver"
    429 
    430 #: includes/sections/slope-reservations/settings-section.php:39
    431 msgid "Testo del pulsante in tedesco"
    432 msgstr "Button label in German"
    433 
    434 #: includes/sections/slope-reservations/settings-section.php:41
    435 msgid "Es: Buchen"
    436 msgstr "Eg: Buchen"
    437 
    438 #: includes/sections/slope-reservations/settings-section.php:44
    439 msgid "Testo del pulsante in grassetto"
    440 msgstr "Bold button text"
    441 
    442 #: includes/sections/slope-reservations/settings-section.php:53
    443 msgid "Aspetto"
    444 msgstr "Style"
    445 
    446 #: includes/sections/slope-reservations/settings-section.php:73
    447 msgid "Mostra selezione bambini"
    448 msgstr "Show children select field"
    449 
    450 #: includes/sections/slope-reservations/settings-section.php:78
    451 msgid "Visualizza il widget su due righe"
    452 msgstr "Display the widget on two rows"
    453 
    454 #: includes/sections/slope-reservations/settings-section.php:89
    455 msgid "Filtri"
    456 msgstr "Filters"
    457 
    458 #: includes/sections/slope-reservations/settings-section.php:92
    459 msgid "Età massima dei bambini (in anni)"
    460 msgstr "Maximum children age (years)"
    461 
    462 #: includes/sections/slope-reservations/settings-section.php:94
    463 msgid "Es: 12"
    464 msgstr "Eg: 12"
    465 
    466 #: includes/sections/slope-reservations/settings-section.php:97
    467 msgid "Soggiorno minimo suggerito"
    468 msgstr "Minimum stay suggested"
    469 
    470 #: includes/sections/slope-reservations/settings-section.php:99
    471 msgid "Es: 3"
    472 msgstr "Eg: 3"
    473 
    474 #: slope-promotions-legacy.php:20
     485#: slope-promotions-legacy.php:26
    475486msgid ""
    476487"Attenzione: Questo widget per le promozioni verrà sostituito in una versione "
     
    481492"recommend using the new Slope promotions widget."
    482493
    483 #: slope-promotions-legacy.php:25
     494#: slope-promotions-legacy.php:31
    484495msgid "Personalizza il widget delle promozioni di Slope. Usa lo "
    485496msgstr "Customize the Slope promotions widget. Just use "
    486497
    487 #: slope-promotions-legacy.php:31
     498#: slope-promotions-legacy.php:37
    488499msgid "ID struttura"
    489500msgstr "Hotel ID"
    490501
    491 #: slope-promotions-legacy.php:33
     502#: slope-promotions-legacy.php:39
    492503msgid "Il tuo Slope ID"
    493504msgstr "Your Slope hotel ID"
    494505
    495 #: slope-promotions-legacy.php:49
     506#: slope-promotions-legacy.php:55
    496507msgid "Nascondi informazioni delle promozioni"
    497508msgstr "Hide promotions information"
    498509
    499 #: slope-promotions-legacy.php:63
     510#: slope-promotions-legacy.php:69
    500511msgid "SCHEDA"
    501512msgstr "CARD"
    502513
    503 #: slope-promotions-legacy.php:74
     514#: slope-promotions-legacy.php:80
    504515msgid "Spessore dei bordi"
    505516msgstr "Border size"
    506517
    507 #: slope-promotions-legacy.php:83
     518#: slope-promotions-legacy.php:89
    508519msgid "Colore dei bordi"
    509520msgstr "Border color"
    510521
    511 #: slope-promotions-legacy.php:102
     522#: slope-promotions-legacy.php:108
    512523msgid "TITOLO"
    513524msgstr "TITLE"
    514525
    515 #: slope-promotions-legacy.php:130 slope-promotions-legacy.php:190
     526#: slope-promotions-legacy.php:136 slope-promotions-legacy.php:196
    516527msgid "Peso del font"
    517528msgstr "Font weight"
    518529
    519 #: slope-promotions-legacy.php:163
     530#: slope-promotions-legacy.php:169
    520531msgid "PULSANTE"
    521532msgstr "BUTTON"
    522533
    523 #: slope-promotions-legacy.php:204
     534#: slope-promotions-legacy.php:210
    524535msgid "TESTO"
    525536msgstr "TEXT"
    526537
    527 #: slope-promotions-legacy.php:225
     538#: slope-promotions-legacy.php:231
    528539msgid "Numero di schede da mostrare per riga"
    529540msgstr "Cards to show in a row"
    530541
    531 #: slope-promotions-legacy.php:249
     542#: slope-promotions-legacy.php:255
    532543msgid "Impostazioni"
    533544msgstr "Settings"
    534545
    535 #: slope-reservations.php:19
    536 msgid "Personalizza il widget di prenotazione di Slope. Usa lo "
    537 msgstr "Customize the Slope reservations widget. Use the "
    538 
    539 #: slope-widgets.php:212
     546#: slope-widgets.php:196
    540547msgid "Settings"
    541548msgstr "Settings"
  • slope-widgets/trunk/languages/slope-widgets.pot

    r3289147 r3385288  
    33msgstr ""
    44"Project-Id-Version: Slope Widgets\n"
    5 "POT-Creation-Date: 2025-04-28 14:11+0200\n"
     5"POT-Creation-Date: 2025-10-17 16:17+0200\n"
    66"PO-Revision-Date: 2018-01-04 14:50+0100\n"
    77"Last-Translator: \n"
     
    1111"Content-Transfer-Encoding: 8bit\n"
    1212"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
    13 "X-Generator: Poedit 3.6\n"
     13"X-Generator: Poedit 3.8\n"
    1414"X-Poedit-Basepath: ..\n"
    1515"X-Poedit-WPHeader: slope-widgets.php\n"
     
    1919"X-Poedit-SearchPathExcluded-0: *.js\n"
    2020
    21 #: includes/admin/GlobalSettings.php:20
     21#: includes/admin/GlobalSettings.php:24
    2222msgid "Impostazioni di Slope Widgets"
    2323msgstr ""
    2424
    25 #: includes/admin/GlobalSettings.php:66
     25#: includes/admin/GlobalSettings.php:74
    2626msgid "L'ID Struttura non è valido."
    2727msgstr ""
    2828
    29 #: includes/admin/Promotions.php:78
     29#: includes/admin/Promotions.php:93
    3030msgid "Id Struttura non impostato"
    3131msgstr ""
    3232
    33 #: includes/admin/Promotions.php:189
     33#: includes/admin/Promotions.php:209 includes/admin/Reservations.php:392
    3434msgid "Una delle proprietà non è valida, controllare i valori e riprovare"
    3535msgstr ""
    3636
    3737#: includes/pages/global-settings/index.php:14
    38 #: includes/pages/promotions/index.php:35 slope-promotions-legacy.php:262
    39 #: slope-reservations.php:34
     38#: includes/pages/promotions/index.php:35
     39#: includes/pages/reservations/index.php:21 slope-promotions-legacy.php:268
    4040msgid "Salva modifiche"
    4141msgstr ""
    4242
    43 #: includes/pages/global-settings/partials/form.php:8
     43#: includes/pages/global-settings/partials/form.php:10
    4444msgid "Slope Widgets funziona con gli shortcode. Se non sai cosa sono e come funzionano, consulta la"
    4545msgstr ""
    4646
    47 #: includes/pages/global-settings/partials/form.php:8
     47#: includes/pages/global-settings/partials/form.php:10
    4848msgid "documentazione"
    4949msgstr ""
    5050
    51 #: includes/pages/global-settings/partials/form.php:8
     51#: includes/pages/global-settings/partials/form.php:10
    5252msgid "di WordPress."
    5353msgstr ""
    5454
    55 #: includes/pages/global-settings/partials/form.php:11
     55#: includes/pages/global-settings/partials/form.php:13
    5656msgid "Se il sito web della tua struttura è multilingua e preferisci mostrare il widget di prenotazione e il booking engine in un'altra lingua, aggiungi il parametro opzionale lang allo shortcode che inserirai nelle pagine del sito tradotte."
    5757msgstr ""
    5858
    59 #: includes/pages/global-settings/partials/form.php:14
     59#: includes/pages/global-settings/partials/form.php:16
    6060msgid "Le lingue supportate dalla barra delle prenotazioni sono italiano, inglese, francese e tedesco (it, en, fr, de)."
    6161msgstr ""
    6262
    63 #: includes/pages/global-settings/partials/form.php:17
     63#: includes/pages/global-settings/partials/form.php:19
    6464msgid "Shortcode supportati:"
    6565msgstr ""
    6666
    67 #: includes/pages/global-settings/partials/form.php:20
     67#: includes/pages/global-settings/partials/form.php:22
    6868msgid "mostra widget e booking engine in base alla lingua del browser del visitatore, o in inglese se la lingua non è supportata."
    6969msgstr ""
    7070
    71 #: includes/pages/global-settings/partials/form.php:21
     71#: includes/pages/global-settings/partials/form.php:23
    7272msgid "mostra widget e booking engine sempre in inglese."
    7373msgstr ""
    7474
    75 #: includes/pages/global-settings/partials/form.php:22
     75#: includes/pages/global-settings/partials/form.php:24
    7676msgid "mostra widget e booking engine sempre in italiano."
    7777msgstr ""
    7878
    79 #: includes/pages/global-settings/partials/form.php:23
     79#: includes/pages/global-settings/partials/form.php:25
    8080msgid "mostra widget e booking engine sempre in francese."
    8181msgstr ""
    8282
    83 #: includes/pages/global-settings/partials/form.php:24
     83#: includes/pages/global-settings/partials/form.php:26
    8484msgid "mostra widget e booking engine sempre in tedesco."
    8585msgstr ""
    8686
    87 #: includes/pages/global-settings/partials/form.php:25
     87#: includes/pages/global-settings/partials/form.php:27
    8888msgid "mostra le promozioni in base alla lingua del browser del visitatore, o in inglese se la lingua non è supportata."
    8989msgstr ""
    9090
    91 #: includes/pages/global-settings/partials/form.php:26
     91#: includes/pages/global-settings/partials/form.php:28
    9292msgid "mostra le promozioni sempre in inglese."
    9393msgstr ""
    9494
    95 #: includes/pages/global-settings/partials/form.php:27
     95#: includes/pages/global-settings/partials/form.php:29
    9696msgid "mostra le promozioni sempre in italiano."
    9797msgstr ""
    9898
    99 #: includes/pages/global-settings/partials/form.php:28
     99#: includes/pages/global-settings/partials/form.php:30
    100100msgid "mostra le promozioni sempre in francese."
    101101msgstr ""
    102102
    103 #: includes/pages/global-settings/partials/form.php:29
     103#: includes/pages/global-settings/partials/form.php:31
    104104msgid "mostra le promozioni sempre in tedesco."
    105105msgstr ""
    106106
    107 #: includes/pages/global-settings/partials/form.php:35
     107#: includes/pages/global-settings/partials/form.php:37
    108108msgid "Impostazioni Generali"
    109109msgstr ""
    110110
    111 #: includes/pages/global-settings/partials/form.php:38
     111#: includes/pages/global-settings/partials/form.php:40
    112112msgid "ID Struttura Slope"
    113113msgstr ""
    114114
    115 #: includes/pages/global-settings/partials/form.php:44
     115#: includes/pages/global-settings/partials/form.php:46
    116116msgid "Inserisci qui l'identificativo della tua struttura"
    117117msgstr ""
    118118
    119 #: includes/pages/global-settings/partials/form.php:46
     119#: includes/pages/global-settings/partials/form.php:48
    120120msgid "Hai acquistato Slope ma non hai ancora l'ID?"
    121121msgstr ""
    122122
    123 #: includes/pages/global-settings/partials/form.php:47
     123#: includes/pages/global-settings/partials/form.php:49
    124124msgid "Richiesta ID Struttura da Slope Widgets WP Plugin"
    125125msgstr ""
    126126
    127 #: includes/pages/global-settings/partials/form.php:48
     127#: includes/pages/global-settings/partials/form.php:50
    128128msgid "Richiedilo ora"
    129129msgstr ""
    130130
    131 #: includes/pages/global-settings/partials/form.php:53
     131#: includes/pages/global-settings/partials/form.php:55
    132132msgid "Apri il booking engine in una nuova scheda"
    133133msgstr ""
    134134
    135 #: includes/pages/global-settings/partials/form.php:58
     135#: includes/pages/global-settings/partials/form.php:64
    136136msgid "Selezionando questa casella, il booking engine verrà aperto in una nuova scheda del browser."
    137137msgstr ""
     
    141141msgstr ""
    142142
    143 #: includes/pages/promotions/index.php:12 slope-promotions-legacy.php:25
    144 #: slope-reservations.php:21
     143#: includes/pages/promotions/index.php:12
     144#: includes/pages/reservations/index.php:8 slope-promotions-legacy.php:31
    145145msgid "per inserirlo dove vuoi!"
    146146msgstr ""
    147147
    148 #: includes/pages/promotions/index.php:16 slope-promotions-legacy.php:27
    149 #: slope-reservations.php:24
     148#: includes/pages/promotions/index.php:16
     149#: includes/pages/reservations/index.php:11 slope-promotions-legacy.php:33
    150150msgid "Per modificare il tuo ID struttura "
    151151msgstr ""
    152152
    153 #: includes/pages/promotions/index.php:17 slope-promotions-legacy.php:27
    154 #: slope-reservations.php:25
     153#: includes/pages/promotions/index.php:17
     154#: includes/pages/reservations/index.php:12 slope-promotions-legacy.php:33
    155155msgid "clicca qui"
    156156msgstr ""
    157157
    158 #: includes/pages/promotions/index.php:25 slope-promotions-legacy.php:252
     158#: includes/pages/promotions/index.php:25 slope-promotions-legacy.php:258
    159159msgid "Stile"
    160160msgstr ""
    161161
    162162#: includes/pages/promotions/index.php:28
    163 #: includes/pages/promotions/partials/layout-section.php:11
    164 #: slope-promotions-legacy.php:255
     163#: includes/pages/promotions/partials/layout-section.php:14
     164#: slope-promotions-legacy.php:261
    165165msgid "Layout"
    166166msgstr ""
    167167
    168 #: includes/pages/promotions/partials/layout-section.php:16
     168#: includes/pages/promotions/partials/layout-section.php:19
    169169msgid "Orientamento scheda"
    170170msgstr ""
    171171
    172 #: includes/pages/promotions/partials/layout-section.php:23
     172#: includes/pages/promotions/partials/layout-section.php:26
    173173msgid "Orizzontale"
    174174msgstr ""
    175175
    176 #: includes/pages/promotions/partials/layout-section.php:24
     176#: includes/pages/promotions/partials/layout-section.php:27
    177177msgid "Verticale"
    178178msgstr ""
    179179
    180 #: includes/pages/promotions/partials/layout-section.php:39
     180#: includes/pages/promotions/partials/layout-section.php:42
    181181msgid "Numero di promozioni per riga"
    182182msgstr ""
    183183
    184 #: includes/pages/promotions/partials/layout-section.php:70
     184#: includes/pages/promotions/partials/layout-section.php:78
    185185msgid "Specifica il numero di promozioni massime da mostrare in ogni riga in schermi più larghi di 1024px. Nel layout orizzontale è possibile selezionare un massimo di 2 colonne ogni riga."
    186186msgstr ""
    187187
    188 #: includes/pages/promotions/partials/layout-section.php:82
     188#: includes/pages/promotions/partials/layout-section.php:90
    189189msgid "Descrizioni"
    190190msgstr ""
    191191
    192 #: includes/pages/promotions/partials/layout-section.php:87
    193 #: slope-promotions-legacy.php:40
     192#: includes/pages/promotions/partials/layout-section.php:95
     193#: slope-promotions-legacy.php:46
    194194msgid "Nascondi descrizione delle promozioni"
    195195msgstr ""
    196196
    197 #: includes/pages/promotions/partials/layout-section.php:96
     197#: includes/pages/promotions/partials/layout-section.php:105
    198198msgid "Massimo di righe per la descrizione delle promozioni"
    199199msgstr ""
    200200
    201 #: includes/pages/promotions/partials/promotionsList.ajax.php:8
     201#: includes/pages/promotions/partials/promotionsList.ajax.php:10
    202202msgid "Non sono presenti promozioni disponibili."
    203203msgstr ""
    204204
    205 #: includes/pages/promotions/partials/style-section.php:13
    206 #: slope-promotions-legacy.php:145
     205#: includes/pages/promotions/partials/style-section.php:17
     206#: slope-promotions-legacy.php:151
    207207msgid "Sinistra"
    208208msgstr ""
    209209
    210 #: includes/pages/promotions/partials/style-section.php:14
    211 #: slope-promotions-legacy.php:146
     210#: includes/pages/promotions/partials/style-section.php:18
     211#: slope-promotions-legacy.php:152
    212212msgid "Centro"
    213213msgstr ""
    214214
    215 #: includes/pages/promotions/partials/style-section.php:15
    216 #: slope-promotions-legacy.php:147
     215#: includes/pages/promotions/partials/style-section.php:19
     216#: slope-promotions-legacy.php:153
    217217msgid "Destra"
    218218msgstr ""
    219219
    220 #: includes/pages/promotions/partials/style-section.php:20
    221 #: slope-promotions-legacy.php:124 slope-promotions-legacy.php:184
     220#: includes/pages/promotions/partials/style-section.php:24
     221#: slope-promotions-legacy.php:130 slope-promotions-legacy.php:190
    222222msgid "Leggero"
    223223msgstr ""
    224224
    225 #: includes/pages/promotions/partials/style-section.php:21
    226 #: slope-promotions-legacy.php:125 slope-promotions-legacy.php:185
     225#: includes/pages/promotions/partials/style-section.php:25
     226#: slope-promotions-legacy.php:131 slope-promotions-legacy.php:191
    227227msgid "Normale"
    228228msgstr ""
    229229
    230 #: includes/pages/promotions/partials/style-section.php:22
    231 #: slope-promotions-legacy.php:126 slope-promotions-legacy.php:186
     230#: includes/pages/promotions/partials/style-section.php:26
     231#: slope-promotions-legacy.php:132 slope-promotions-legacy.php:192
    232232msgid "Medio"
    233233msgstr ""
    234234
    235 #: includes/pages/promotions/partials/style-section.php:23
    236 #: slope-promotions-legacy.php:127 slope-promotions-legacy.php:187
     235#: includes/pages/promotions/partials/style-section.php:27
     236#: slope-promotions-legacy.php:133 slope-promotions-legacy.php:193
    237237msgid "Grassetto Leggero"
    238238msgstr ""
    239239
    240 #: includes/pages/promotions/partials/style-section.php:24
    241 #: slope-promotions-legacy.php:128 slope-promotions-legacy.php:188
     240#: includes/pages/promotions/partials/style-section.php:28
     241#: slope-promotions-legacy.php:134 slope-promotions-legacy.php:194
    242242msgid "Grassetto"
    243243msgstr ""
    244244
    245 #: includes/pages/promotions/partials/style-section.php:38
     245#: includes/pages/promotions/partials/style-section.php:42
    246246msgid "Contenitore"
    247247msgstr ""
    248248
    249 #: includes/pages/promotions/partials/style-section.php:43
    250 #: slope-promotions-legacy.php:65
     249#: includes/pages/promotions/partials/style-section.php:47
     250#: slope-promotions-legacy.php:71
    251251msgid "Colore dello sfondo"
    252252msgstr ""
    253253
    254 #: includes/pages/promotions/partials/style-section.php:51
    255 #: slope-promotions-legacy.php:92
     254#: includes/pages/promotions/partials/style-section.php:55
     255#: slope-promotions-legacy.php:98
    256256msgid "Raggio dei bordi"
    257257msgstr ""
    258258
    259 #: includes/pages/promotions/partials/style-section.php:67
     259#: includes/pages/promotions/partials/style-section.php:71
    260260msgid "Seleziona il raggio di arrotondamento degli angoli delle schede promozioni. Ad un raggio più alto corrisponde un arrotondamento degli angoli maggiore."
    261261msgstr ""
    262262
    263 #: includes/pages/promotions/partials/style-section.php:78
     263#: includes/pages/promotions/partials/style-section.php:82
    264264msgid "Titolo"
    265265msgstr ""
    266266
    267 #: includes/pages/promotions/partials/style-section.php:84
    268 #: includes/pages/promotions/partials/style-section.php:159
    269 #: includes/pages/promotions/partials/style-section.php:243
    270 #: includes/sections/slope-reservations/settings-section.php:67
    271 #: slope-promotions-legacy.php:104 slope-promotions-legacy.php:174
    272 #: slope-promotions-legacy.php:206
     267#: includes/pages/promotions/partials/style-section.php:88
     268#: includes/pages/promotions/partials/style-section.php:163
     269#: includes/pages/promotions/partials/style-section.php:249
     270#: includes/pages/reservations/partials/form.php:68
     271#: slope-promotions-legacy.php:110 slope-promotions-legacy.php:180
     272#: slope-promotions-legacy.php:212
    273273msgid "Colore del testo"
    274274msgstr ""
    275275
    276 #: includes/pages/promotions/partials/style-section.php:94
    277 #: includes/pages/promotions/partials/style-section.php:169
    278 #: slope-promotions-legacy.php:113
     276#: includes/pages/promotions/partials/style-section.php:98
     277#: includes/pages/promotions/partials/style-section.php:173
     278#: slope-promotions-legacy.php:119
    279279msgid "Dimensione del testo"
    280280msgstr ""
    281281
    282 #: includes/pages/promotions/partials/style-section.php:111
    283 #: includes/pages/promotions/partials/style-section.php:186
    284 #: includes/pages/promotions/partials/style-section.php:253
     282#: includes/pages/promotions/partials/style-section.php:115
     283#: includes/pages/promotions/partials/style-section.php:190
     284#: includes/pages/promotions/partials/style-section.php:259
    285285msgid "Peso del testo"
    286286msgstr ""
    287287
    288 #: includes/pages/promotions/partials/style-section.php:129
     288#: includes/pages/promotions/partials/style-section.php:133
    289289msgid "Allineamento del titolo"
    290290msgstr ""
    291291
    292 #: includes/pages/promotions/partials/style-section.php:152
     292#: includes/pages/promotions/partials/style-section.php:156
    293293msgid "Descrizione"
    294294msgstr ""
    295295
    296 #: includes/pages/promotions/partials/style-section.php:204
    297 #: slope-promotions-legacy.php:149
     296#: includes/pages/promotions/partials/style-section.php:208
     297#: slope-promotions-legacy.php:155
    298298msgid "Allineamento del testo"
    299299msgstr ""
    300300
    301 #: includes/pages/promotions/partials/style-section.php:225
    302 #: includes/sections/slope-reservations/settings-section.php:20
     301#: includes/pages/promotions/partials/style-section.php:231
     302#: includes/pages/reservations/partials/form.php:21
    303303msgid "Pulsante"
    304304msgstr ""
    305305
    306 #: includes/pages/promotions/partials/style-section.php:232
    307 #: includes/sections/slope-reservations/settings-section.php:58
    308 #: slope-promotions-legacy.php:165
     306#: includes/pages/promotions/partials/style-section.php:238
     307#: includes/pages/reservations/partials/form.php:59
     308#: slope-promotions-legacy.php:171
    309309msgid "Colore di sfondo"
     310msgstr ""
     311
     312#: includes/pages/reservations/index.php:6
     313msgid "Personalizza il widget di prenotazione di Slope. Usa lo "
     314msgstr ""
     315
     316#: includes/pages/reservations/partials/form.php:24
     317msgid "Testo del pulsante in italiano"
     318msgstr ""
     319
     320#: includes/pages/reservations/partials/form.php:27
     321msgid "Es: Prenota"
     322msgstr ""
     323
     324#: includes/pages/reservations/partials/form.php:30
     325msgid "Testo del pulsante in inglese"
     326msgstr ""
     327
     328#: includes/pages/reservations/partials/form.php:32
     329msgid "Es: Book now"
     330msgstr ""
     331
     332#: includes/pages/reservations/partials/form.php:35
     333msgid "Testo del pulsante in francese"
     334msgstr ""
     335
     336#: includes/pages/reservations/partials/form.php:37
     337msgid "Es: Réserver"
     338msgstr ""
     339
     340#: includes/pages/reservations/partials/form.php:40
     341msgid "Testo del pulsante in tedesco"
     342msgstr ""
     343
     344#: includes/pages/reservations/partials/form.php:42
     345msgid "Es: Buchen"
     346msgstr ""
     347
     348#: includes/pages/reservations/partials/form.php:45
     349msgid "Testo del pulsante in grassetto"
     350msgstr ""
     351
     352#: includes/pages/reservations/partials/form.php:54
     353msgid "Aspetto"
     354msgstr ""
     355
     356#: includes/pages/reservations/partials/form.php:74
     357msgid "Mostra selezione bambini"
     358msgstr ""
     359
     360#: includes/pages/reservations/partials/form.php:79
     361msgid "Visualizza il widget su due righe"
     362msgstr ""
     363
     364#: includes/pages/reservations/partials/form.php:90
     365msgid "Filtri"
     366msgstr ""
     367
     368#: includes/pages/reservations/partials/form.php:93
     369msgid "Età minima dei bambini (in anni)"
     370msgstr ""
     371
     372#: includes/pages/reservations/partials/form.php:95
     373msgid "Es: 0"
     374msgstr ""
     375
     376#: includes/pages/reservations/partials/form.php:98
     377msgid "Età massima dei bambini (in anni)"
     378msgstr ""
     379
     380#: includes/pages/reservations/partials/form.php:100
     381msgid "Es: 12"
     382msgstr ""
     383
     384#: includes/pages/reservations/partials/form.php:103
     385msgid "Soggiorno minimo suggerito"
     386msgstr ""
     387
     388#: includes/pages/reservations/partials/form.php:105
     389msgid "Es: 3"
    310390msgstr ""
    311391
     
    358438msgstr ""
    359439
    360 #: includes/sections/slope-reservations/settings-section.php:23
    361 msgid "Testo del pulsante in italiano"
    362 msgstr ""
    363 
    364 #: includes/sections/slope-reservations/settings-section.php:26
    365 msgid "Es: Prenota"
    366 msgstr ""
    367 
    368 #: includes/sections/slope-reservations/settings-section.php:29
    369 msgid "Testo del pulsante in inglese"
    370 msgstr ""
    371 
    372 #: includes/sections/slope-reservations/settings-section.php:31
    373 msgid "Es: Book now"
    374 msgstr ""
    375 
    376 #: includes/sections/slope-reservations/settings-section.php:34
    377 msgid "Testo del pulsante in francese"
    378 msgstr ""
    379 
    380 #: includes/sections/slope-reservations/settings-section.php:36
    381 msgid "Es: Réserver"
    382 msgstr ""
    383 
    384 #: includes/sections/slope-reservations/settings-section.php:39
    385 msgid "Testo del pulsante in tedesco"
    386 msgstr ""
    387 
    388 #: includes/sections/slope-reservations/settings-section.php:41
    389 msgid "Es: Buchen"
    390 msgstr ""
    391 
    392 #: includes/sections/slope-reservations/settings-section.php:44
    393 msgid "Testo del pulsante in grassetto"
    394 msgstr ""
    395 
    396 #: includes/sections/slope-reservations/settings-section.php:53
    397 msgid "Aspetto"
    398 msgstr ""
    399 
    400 #: includes/sections/slope-reservations/settings-section.php:73
    401 msgid "Mostra selezione bambini"
    402 msgstr ""
    403 
    404 #: includes/sections/slope-reservations/settings-section.php:78
    405 msgid "Visualizza il widget su due righe"
    406 msgstr ""
    407 
    408 #: includes/sections/slope-reservations/settings-section.php:89
    409 msgid "Filtri"
    410 msgstr ""
    411 
    412 #: includes/sections/slope-reservations/settings-section.php:92
    413 msgid "Età massima dei bambini (in anni)"
    414 msgstr ""
    415 
    416 #: includes/sections/slope-reservations/settings-section.php:94
    417 msgid "Es: 12"
    418 msgstr ""
    419 
    420 #: includes/sections/slope-reservations/settings-section.php:97
    421 msgid "Soggiorno minimo suggerito"
    422 msgstr ""
    423 
    424 #: includes/sections/slope-reservations/settings-section.php:99
    425 msgid "Es: 3"
    426 msgstr ""
    427 
    428 #: slope-promotions-legacy.php:20
     440#: slope-promotions-legacy.php:26
    429441msgid "Attenzione: Questo widget per le promozioni verrà sostituito in una versione futura. Ti consigliamo di utilizzare il nuovo widget delle promozioni di Slope."
    430442msgstr ""
    431443
    432 #: slope-promotions-legacy.php:25
     444#: slope-promotions-legacy.php:31
    433445msgid "Personalizza il widget delle promozioni di Slope. Usa lo "
    434446msgstr ""
    435447
    436 #: slope-promotions-legacy.php:31
     448#: slope-promotions-legacy.php:37
    437449msgid "ID struttura"
    438450msgstr ""
    439451
    440 #: slope-promotions-legacy.php:33
     452#: slope-promotions-legacy.php:39
    441453msgid "Il tuo Slope ID"
    442454msgstr ""
    443455
    444 #: slope-promotions-legacy.php:49
     456#: slope-promotions-legacy.php:55
    445457msgid "Nascondi informazioni delle promozioni"
    446458msgstr ""
    447459
    448 #: slope-promotions-legacy.php:63
     460#: slope-promotions-legacy.php:69
    449461msgid "SCHEDA"
    450462msgstr ""
    451463
    452 #: slope-promotions-legacy.php:74
     464#: slope-promotions-legacy.php:80
    453465msgid "Spessore dei bordi"
    454466msgstr ""
    455467
    456 #: slope-promotions-legacy.php:83
     468#: slope-promotions-legacy.php:89
    457469msgid "Colore dei bordi"
    458470msgstr ""
    459471
    460 #: slope-promotions-legacy.php:102
     472#: slope-promotions-legacy.php:108
    461473msgid "TITOLO"
    462474msgstr ""
    463475
    464 #: slope-promotions-legacy.php:130 slope-promotions-legacy.php:190
     476#: slope-promotions-legacy.php:136 slope-promotions-legacy.php:196
    465477msgid "Peso del font"
    466478msgstr ""
    467479
    468 #: slope-promotions-legacy.php:163
     480#: slope-promotions-legacy.php:169
    469481msgid "PULSANTE"
    470482msgstr ""
    471483
    472 #: slope-promotions-legacy.php:204
     484#: slope-promotions-legacy.php:210
    473485msgid "TESTO"
    474486msgstr ""
    475487
    476 #: slope-promotions-legacy.php:225
     488#: slope-promotions-legacy.php:231
    477489msgid "Numero di schede da mostrare per riga"
    478490msgstr ""
    479491
    480 #: slope-promotions-legacy.php:249
     492#: slope-promotions-legacy.php:255
    481493msgid "Impostazioni"
    482494msgstr ""
    483495
    484 #: slope-reservations.php:19
    485 msgid "Personalizza il widget di prenotazione di Slope. Usa lo "
    486 msgstr ""
    487 
    488 #: slope-widgets.php:212
     496#: slope-widgets.php:196
    489497msgid "Settings"
    490498msgstr ""
  • slope-widgets/trunk/readme.txt

    r3294859 r3385288  
    66Requires PHP: 7.0
    77Tested up to: 6.8
    8 Stable tag: 4.3.2
     8Stable tag: 4.3.3
    99License: GPLv2 or later
    1010License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    4040== Changelog ==
    4141
     42= 4.3.3 =
     43* Possibilità di indicare l'età minima dei bambini nelle impostazioni del plugin
     44* Correzioni minori
     45
    4246= 4.3.2 =
    4347* Correzioni minori
  • slope-widgets/trunk/slope-promotions-legacy.php

    r3289147 r3385288  
    11<?php
    22// SLOPE PROMOTIONS
     3
     4use SlopeWidgets\Settings\GlobalSettingsProvider;
     5use SlopeWidgets\Settings\LegacyPromotionsSettingProvider;
     6use SlopeWidgets\Enums\FontWeight;
     7use SlopeWidgets\Enums\CardLayout;
     8use SlopeWidgets\Enums\TextAlignment;
    39
    410add_shortcode('slope-promotions', 'slope_promotions');
  • slope-widgets/trunk/slope-widgets.php

    r3294859 r3385288  
    33* Plugin Name: Slope Widgets
    44* Description: Aggiungi i widget di Slope al sito web WordPress della tua struttura ricettiva! Questo plugin ti permette di mostrare la barra delle prenotazioni, i pacchetti e le promozioni tramite shortcode personalizzabili.
    5 * Version: 4.3.2
     5* Version: 4.3.3
    66* Author: Slope
    77* Author URI: https://www.slope.it/
     
    1616
    1717// We use this constant to invalidate the cache of the plugin's assets
    18 const SLOPE_WIDGETS_CACHE_BUST_VERSION = '4.3.2';
     18const SLOPE_WIDGETS_CACHE_BUST_VERSION = '4.3.3';
    1919
    2020// Current version of the database schema. It is used to check if the database schema needs to be updated.
     
    2323const SLOPE_DB_VERSION_OPTION_KEY = 'slope_db_schema_version';
    2424
    25 // TODO: At the moment this is used only for the new promotions. Reservation plugin and legacy promotions have hardcoded
    26 //  values inside `slope-widgets.js`. We should refactor this to use the same constant in the future.
     25// TODO: At the moment this is used only for the new promotions. Legacy promotions have hardcoded values inside
     26//  `slope-widgets.js`. We should refactor this to use the same constant in the future.
    2727define(
    2828    'SLOPE_BOOKING_ENGINE_BASE_URL',
     
    4141define('SLOPE_WIDGETS_PATH', plugin_dir_path(__FILE__));
    4242
    43 // Initialization
    44 require_once(plugin_dir_path(__FILE__) . 'includes/enums/AbstractEnum.php');
    45 require_once(plugin_dir_path(__FILE__) . 'includes/enums/CardLayout.php');
    46 require_once(plugin_dir_path(__FILE__) . 'includes/enums/FontWeight.php');
    47 require_once(plugin_dir_path(__FILE__) . 'includes/enums/TextAlignment.php');
    48 require_once(plugin_dir_path(__FILE__) . 'includes/settings/PromotionsSettingsProvider.php');
    49 require_once(plugin_dir_path(__FILE__) . 'includes/settings/ReservationsSettingsProvider.php');
    50 require_once(plugin_dir_path(__FILE__) . 'includes/settings/LegacyPromotionsSettingProvider.php');
    51 require_once(plugin_dir_path(__FILE__) . 'includes/settings/GlobalSettingsProvider.php');
    52 require_once(plugin_dir_path(__FILE__) . 'includes/DBUpgrader.php');
    53 require_once(plugin_dir_path(__FILE__) . 'includes/helpers/LanguageResolver.php');
    54 require_once(plugin_dir_path(__FILE__) . 'includes/admin/GlobalSettings.php');
    55 require_once(plugin_dir_path(__FILE__) . 'includes/admin/WelcomePage.php');
    56 require_once(plugin_dir_path(__FILE__) . 'includes/admin/Promotions.php');
    57 require_once(plugin_dir_path(__FILE__) . 'validation/rules/ValidationRule.php');
    58 require_once(plugin_dir_path(__FILE__) . 'validation/Validator.php');
    59 require_once(plugin_dir_path(__FILE__) . 'validation/rules/HexColor.php');
    60 require_once(plugin_dir_path(__FILE__) . 'validation/rules/InArray.php');
    61 require_once(plugin_dir_path(__FILE__) . 'validation/rules/Range.php');
    62 require_once(plugin_dir_path(__FILE__) . 'validation/rules/Uuid.php');
     43// Register PSR-4 autoloader
     44require_once(SLOPE_WIDGETS_PATH . 'includes/Autoloader.php');
     45SlopeWidgets\Autoloader::register();
     46
     47// Use statements for classes we'll instantiate
     48use SlopeWidgets\Admin\WelcomePage;
     49use SlopeWidgets\Admin\GlobalSettings;
     50use SlopeWidgets\Admin\Reservations;
     51use SlopeWidgets\Admin\Promotions;
     52use SlopeWidgets\DBUpgrader;
     53use SlopeWidgets\Settings\ReservationsSettingsProvider;
    6354
    6455// NOTE: The order of instantiations is important to render the item of the admin menu in the right order. As we are
     
    6758$welcome_page = new WelcomePage();
    6859$globalSettings = new GlobalSettings();
     60$reservationsPage = new Reservations();
    6961
    7062// Hook
     
    178170function slope_init()
    179171{
    180     // Slope reservations
    181     // NOTE: The key 'slope_options' is used to store settings about the reservations widget
    182     register_setting('slope_options', 'slope_options', 'slope_reservations_options_validate');
    183     add_settings_section('reservations_section', '', 'slope_reservations_intro', 'slope_reservations_page');
    184     add_settings_field('slope_text_color', '', 'slope_reservations_page', 'reservations_section');
    185     add_settings_field('slope_text_color', '', 'slope_reservations_page', 'reservations_section');
    186 
    187172    // Slope promotions legacy
    188173    register_setting('slope_promotions_options', 'slope_promotions_options');
    189174    add_settings_section('promotions_section', '', 'slope_promotions_intro', 'slope_promotions_page');
    190 
    191175}
    192176
     
    202186    // Slug is an alphanumeric string used to identify the page in the menu. Should be unique for this menu page so we use the plugin's main file path.
    203187    $slug = 'slope-widgets/slope-widgets.php';
    204     add_submenu_page($slug, 'Reservations', 'Reservations', 'manage_options', 'slope_reservations', 'slope_reservations_options_page');
    205188    add_submenu_page($slug, 'Promotions [Deprecato]', 'Promotions [Deprecato]', 'manage_options', 'slope_promotions', 'slope_promotions_options_page');
    206189}
     
    236219}
    237220
    238 //include plugin reservations functionalities
    239 include("slope-reservations.php");
    240 
    241221//include plugin promotions functionalities
    242222// TODO: This is going to be removed in a future release
     
    245225// Include promotion list partials
    246226include("includes/pages/promotions/partials/promotionsList.ajax.php");
    247 
    248 //include plugin settings functionalities
    249 include('includes/sections/slope-reservations/settings-section.php');
  • slope-widgets/trunk/validation/Validator.php

    r3289147 r3385288  
    22declare(strict_types=1);
    33
    4 namespace validation;
     4namespace SlopeWidgets\Validation;
    55
    6 use validation\rules\ValidationRule;
     6use SlopeWidgets\Validation\Rules\ValidationRule;
    77
    88class Validator
  • slope-widgets/trunk/validation/rules/HexColor.php

    r3289147 r3385288  
    22declare(strict_types=1);
    33
    4 namespace validation\rules;
     4namespace SlopeWidgets\Validation\Rules;
    55
    66class HexColor implements ValidationRule
  • slope-widgets/trunk/validation/rules/InArray.php

    r3289147 r3385288  
    22declare(strict_types=1);
    33
    4 namespace validation\rules;
     4namespace SlopeWidgets\Validation\Rules;
    55
    66class InArray implements ValidationRule
  • slope-widgets/trunk/validation/rules/Range.php

    r3289147 r3385288  
    22declare(strict_types=1);
    33
    4 namespace validation\rules;
     4namespace SlopeWidgets\Validation\Rules;
    55
    66class Range implements ValidationRule
  • slope-widgets/trunk/validation/rules/Uuid.php

    r3289147 r3385288  
    22declare(strict_types=1);
    33
    4 namespace validation\rules;
     4namespace SlopeWidgets\Validation\Rules;
    55
    66class Uuid implements ValidationRule
  • slope-widgets/trunk/validation/rules/ValidationRule.php

    r3289147 r3385288  
    22declare(strict_types=1);
    33
    4 namespace validation\rules;
     4namespace SlopeWidgets\Validation\Rules;
    55
    66interface ValidationRule
Note: See TracChangeset for help on using the changeset viewer.