Changeset 3447763
- Timestamp:
- 01/27/2026 10:48:17 AM (3 weeks ago)
- Location:
- marquee-addons-for-elementor
- Files:
-
- 2 added
- 20 edited
- 1 copied
-
tags/3.9.15 (copied) (copied from marquee-addons-for-elementor/trunk)
-
tags/3.9.15/assets/css/admin/admin.min.css (modified) (1 diff)
-
tags/3.9.15/assets/css/admin/notice.min.css (modified) (1 diff)
-
tags/3.9.15/assets/js/admin/admin.min.js (modified) (1 diff)
-
tags/3.9.15/assets/js/handle-animation-duration.min.js (modified) (1 diff)
-
tags/3.9.15/base.php (modified) (1 diff)
-
tags/3.9.15/includes/widget.php (modified) (3 diffs)
-
tags/3.9.15/includes/widgets/class-deensimc-text-marquee.php (modified) (4 diffs)
-
tags/3.9.15/includes/widgets/traits/text-marquee/style-layout-controls.php (added)
-
tags/3.9.15/includes/widgets/traits/text-marquee/style-text-contents.php (modified) (2 diffs)
-
tags/3.9.15/marquee-addons-for-elementor.php (modified) (2 diffs)
-
tags/3.9.15/readme.txt (modified) (2 diffs)
-
trunk/assets/css/admin/admin.min.css (modified) (1 diff)
-
trunk/assets/css/admin/notice.min.css (modified) (1 diff)
-
trunk/assets/js/admin/admin.min.js (modified) (1 diff)
-
trunk/assets/js/handle-animation-duration.min.js (modified) (1 diff)
-
trunk/base.php (modified) (1 diff)
-
trunk/includes/widget.php (modified) (3 diffs)
-
trunk/includes/widgets/class-deensimc-text-marquee.php (modified) (4 diffs)
-
trunk/includes/widgets/traits/text-marquee/style-layout-controls.php (added)
-
trunk/includes/widgets/traits/text-marquee/style-text-contents.php (modified) (2 diffs)
-
trunk/marquee-addons-for-elementor.php (modified) (2 diffs)
-
trunk/readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
marquee-addons-for-elementor/tags/3.9.15/assets/css/admin/admin.min.css
r3446117 r3447763 1 a.toplevel_page_marquee-addons-settings .wp-menu-image img{width:23px;margin-top:-3px}.deensimc-addons-settings{margin-top:20px}.deensimc-marquee-settings-container{background:#fff;border:1px solid #ccd0d4;box-shadow:0 1px 1px rgba(0, 0, 0, 0.04);margin-top:20px}.deensimc-tabs{display:flex;border-bottom:1px solid #ccd0d4;background:#f3f4f5}.deensimc-tab-btn{padding:15px 25px;background:transparent;border:none;cursor:pointer;font-size:14px;font-weight:500;color:#555;border-bottom:3px solid transparent;transition:all .3s ease;display:flex;align-items:center;gap:8px}.deensimc-tab-btn:hover{background:#fff;color:#7456ff}.deensimc-tab-btn.active{background:#fff;color:#7456ff;border-bottom-color:#7456ff}.deensimc-tab-btn .dashicons{font-size:18px;width:18px;height:18px}.deensimc-tab-content{display:none;padding:24px}.deensimc-tab-content.active{display:block}.deensimc-section{margin-bottom:30px}.deensimc-section-header{margin-bottom:25px;display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.deensimc-section-header h2{margin:0;font-size:20px;line-height:1.5}.deensimc-section-header p.deensimc-description{font-size:13px;color:#646970;margin:0;margin-bottom:15px}.deensimc-bulk-actions{display:flex;gap:12px}.deensimc-settings-container{background-color:#fff;border-radius:8px;overflow:hidden;margin-top:20px}.deensimc-settings-container .deensimc-enable-btn{border:1px solid #7456ff;color:#7456ff;background-color:#fff}.deensimc-settings-container .deensimc-disable-btn{border:1px solid red;color:red;background-color:#fff}.deensimc- settings-footer #submit{background-color:#7456ff;border-color:#7456ff}.deensimc-category-section{margin:30px 0 20px 0}.deensimc-category-title{font-size:18px;margin:0 0 20px 0;padding:0;color:#1d2327}.deensimc-widgets-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(300px, 1fr));gap:20px}.deensimc-widget-card{border:1px solid #ddd;border-radius:8px;padding:24px;background:#fff;transition:all .3s ease;box-shadow:0 0 4px 0 rgba(0, 0, 0, 0.1);position:relative;overflow:hidden}.deensimc-widget-card:hover{box-shadow:0 4px 8px rgba(0, 0, 0, 0.2);transform:translateY(-2px)}.deensimc-widget-header{display:flex;align-items:center;gap:10px;margin-bottom:12px}.deensimc-widget-header .dashicons{font-size:24px;width:24px;height:24px;color:#7456ff}.deensimc-widget-custom-icon{width:24px;height:24px;object-fit:contain}.deensimc-settings-header{padding:0}.deensimc-widget-header h3{margin:0;font-size:16px;font-weight:600;flex:1}.deensimc-pro-badge{background:linear-gradient(135deg, #667eea 0%, #764ba2 100%);color:#fff;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;user-select:none;position:absolute;left:0;top:0;transform:rotateZ(-45deg) translate(-26%, -80%);width:80px;display:flex;align-items:center;justify-content:center}.deensimc-widget-description{color:#646970;font-size:13px;line-height:1.5;margin:0 0 15px 0}.deensimc-widget-toggle{display:flex;align-items:center;gap:12px}.deensimc-toggle-label{font-size:13px;color:#646970;font-weight:500}.deensimc-pro-lock-notice{display:flex;align-items:center;gap:8px;padding:10px 12px;background:#fff3cd;border:1px solid #ffc107;border-radius:4px;margin:10px 0;font-size:12px;color:#856404}.deensimc-pro-lock-notice .dashicons{font-size:16px;width:16px;height:16px}.deensimc-switch{position:relative;display:inline-block;width:32px;height:18px}.deensimc-switch.disabled{opacity:.5;cursor:not-allowed}.deensimc-switch.disabled .slider{cursor:not-allowed}.deensimc-switch input{opacity:0;width:0;height:0}.deensimc-switch .slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;transition:.3s;border-radius:24px}.deensimc-switch .slider:before{position:absolute;content:"";height:12px;width:12px;left:3px;bottom:3px;background-color:white;transition:.3s;border-radius:50%}.deensimc-switch input:checked+.slider{background-color:#7456ff}.deensimc-switch input:focus+.slider{box-shadow:0 0 1px #7456ff}.deensimc-switch input:checked+.slider:before{transform:translateX(14px)}.deensimc-settings-footer{padding:20px 30px;background:#f9f9f9;border-top:1px solid #ccd0d4;display:flex;gap:10px;align-items:center}.deensimc-tab-content .form-table th{padding:20px 10px 20px 0;width:220px}.deensimc-tab-content .form-table td{padding:20px 10px}.deensimc-tab-content .form-table .description{margin-top:8px}.deensimc-toggle-demo-wrapper{display:flex;align-items:center;justify-content:space-between}.deensimc-see-demo-btn{color:#7456ff;font-weight:500}@media screen and (max-width: 782px){.deensimc-widgets-grid{grid-template-columns:1fr}.deensimc-tab-content{padding:20px}.deensimc-settings-footer{padding:15px 20px;flex-direction:column;align-items:stretch}.deensimc-settings-footer .button{width:100%;text-align:center}}div.deensimc-notice{position:fixed;right:0;top:32px;margin:20px 0;padding:12px 15px;border-left:4px solid lime;background:#f8fff8;box-shadow:0 1px 1px rgba(0, 0, 0, 0.04)}div.deensimc-notice.error{border-left-color:#d63638;background:#fff6f6}div.deensimc-notice.info{border-left-color:#7456ff;background:#f8f7ff}.deensimc-loading{opacity:.6;pointer-events:none}.deensimc-loading::after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);border:3px solid #f3f3f3;border-top:3px solid #2271b1;border-radius:50%;width:40px;height:40px;animation:deensimc-spin 1s linear infinite}@keyframes deensimc-spin{0%{transform:translate(-50%, -50%) rotate(0deg)}100%{transform:translate(-50%, -50%) rotate(360deg)}}.deensimc-toggle-label{transition:color .3s ease}.deensimc-switch.deensimc-pro-locked:focus,.deensimc-switch.deensimc-pro-locked:active,.deensimc-see-demo-btn:focus,.deensimc-see-demo-btn:active{outline:none !important;box-shadow:none !important}.deensimc-button-group-wrapper{display:flex;align-items:center;gap:12px !important}.deensimc-pro-locked .slider[data-tooltip]::after{content:attr(data-tooltip);position:absolute;top:-38px;left:50%;transform:translateX(-50%) translateY(6px);background:#6d6d6d;color:#fff;font-size:12px;font-weight:600;padding:6px 14px;border-radius:4px;white-space:nowrap;opacity:0;visibility:hidden;pointer-events:none;transition:.2s ease;z-index:9999}.deensimc-pro-locked:hover .slider[data-tooltip]::after{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0)}1 a.toplevel_page_marquee-addons-settings .wp-menu-image img{width:23px;margin-top:-3px}.deensimc-addons-settings{margin-top:20px}.deensimc-marquee-settings-container{background:#fff;border:1px solid #ccd0d4;box-shadow:0 1px 1px rgba(0, 0, 0, 0.04);margin-top:20px}.deensimc-tabs{display:flex;border-bottom:1px solid #ccd0d4;background:#f3f4f5}.deensimc-tab-btn{padding:15px 25px;background:transparent;border:none;cursor:pointer;font-size:14px;font-weight:500;color:#555;border-bottom:3px solid transparent;transition:all .3s ease;display:flex;align-items:center;gap:8px}.deensimc-tab-btn:hover{background:#fff;color:#7456ff}.deensimc-tab-btn.active{background:#fff;color:#7456ff;border-bottom-color:#7456ff}.deensimc-tab-btn .dashicons{font-size:18px;width:18px;height:18px}.deensimc-tab-content{display:none;padding:24px}.deensimc-tab-content.active{display:block}.deensimc-section{margin-bottom:30px}.deensimc-section-header{margin-bottom:25px;display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.deensimc-section-header h2{margin:0;font-size:20px;line-height:1.5}.deensimc-section-header p.deensimc-description{font-size:13px;color:#646970;margin:0;margin-bottom:15px}.deensimc-bulk-actions{display:flex;gap:12px}.deensimc-settings-container{background-color:#fff;border-radius:8px;overflow:hidden;margin-top:20px}.deensimc-settings-container .deensimc-enable-btn{border:1px solid #7456ff;color:#7456ff;background-color:#fff}.deensimc-settings-container .deensimc-disable-btn{border:1px solid red;color:red;background-color:#fff}.deensimc-category-section{margin:30px 0 20px 0}.deensimc-category-title{font-size:18px;margin:0 0 20px 0;padding:0;color:#1d2327}.deensimc-widgets-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(300px, 1fr));gap:20px}.deensimc-widget-card{border:1px solid #ddd;border-radius:8px;padding:24px;background:#fff;transition:all .3s ease;box-shadow:0 0 4px 0 rgba(0, 0, 0, 0.1);position:relative;overflow:hidden}.deensimc-widget-card:hover{box-shadow:0 4px 8px rgba(0, 0, 0, 0.2);transform:translateY(-2px)}.deensimc-widget-header{display:flex;align-items:center;gap:10px;margin-bottom:12px}.deensimc-widget-header .dashicons{font-size:24px;width:24px;height:24px;color:#7456ff}.deensimc-widget-custom-icon{width:24px;height:24px;object-fit:contain}.deensimc-settings-header{padding:0}.deensimc-widget-header h3{margin:0;font-size:16px;font-weight:600;flex:1}.deensimc-pro-badge{background:linear-gradient(135deg, #667eea 0%, #764ba2 100%);color:#fff;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;user-select:none;position:absolute;left:0;top:0;transform:rotateZ(-45deg) translate(-26%, -80%);width:80px;display:flex;align-items:center;justify-content:center}.deensimc-widget-description{color:#646970;font-size:13px;line-height:1.5;margin:0 0 15px 0}.deensimc-widget-toggle{display:flex;align-items:center;gap:12px}.deensimc-toggle-label{font-size:13px;color:#646970;font-weight:500}.deensimc-pro-lock-notice{display:flex;align-items:center;gap:8px;padding:10px 12px;background:#fff3cd;border:1px solid #ffc107;border-radius:4px;margin:10px 0;font-size:12px;color:#856404}.deensimc-pro-lock-notice .dashicons{font-size:16px;width:16px;height:16px}.deensimc-switch{position:relative;display:inline-block;width:32px;height:18px}.deensimc-switch.disabled{opacity:.5;cursor:not-allowed}.deensimc-switch.disabled .slider{cursor:not-allowed}.deensimc-switch input{opacity:0;width:0;height:0}.deensimc-switch .slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;transition:.3s;border-radius:24px}.deensimc-switch .slider:before{position:absolute;content:"";height:12px;width:12px;left:3px;bottom:3px;background-color:white;transition:.3s;border-radius:50%}.deensimc-switch input:checked+.slider{background-color:#7456ff}.deensimc-switch input:focus+.slider{box-shadow:0 0 1px #7456ff}.deensimc-switch input:checked+.slider:before{transform:translateX(14px)}.deensimc-settings-footer{display:none}.deensimc-tab-content .form-table th{padding:20px 10px 20px 0;width:220px}.deensimc-tab-content .form-table td{padding:20px 10px}.deensimc-tab-content .form-table .description{margin-top:8px}.deensimc-toggle-demo-wrapper{display:flex;align-items:center;justify-content:space-between}.deensimc-see-demo-btn{color:#7456ff;font-weight:500}@media screen and (max-width: 782px){.deensimc-widgets-grid{grid-template-columns:1fr}.deensimc-tab-content{padding:20px}}div.deensimc-notice{position:fixed;right:0;top:32px;margin:20px 0;padding:12px 15px;border-left:4px solid lime;background:#f8fff8;box-shadow:0 1px 1px rgba(0, 0, 0, 0.04)}div.deensimc-notice.error{border-left-color:#d63638;background:#fff6f6}div.deensimc-notice.info{border-left-color:#7456ff;background:#f8f7ff}.deensimc-loading{opacity:.6;pointer-events:none}.deensimc-loading::after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);border:3px solid #f3f3f3;border-top:3px solid #2271b1;border-radius:50%;width:40px;height:40px;animation:deensimc-spin 1s linear infinite}@keyframes deensimc-spin{0%{transform:translate(-50%, -50%) rotate(0deg)}100%{transform:translate(-50%, -50%) rotate(360deg)}}.deensimc-toggle-label{transition:color .3s ease}.deensimc-switch.deensimc-pro-locked:focus,.deensimc-switch.deensimc-pro-locked:active,.deensimc-see-demo-btn:focus,.deensimc-see-demo-btn:active{outline:none !important;box-shadow:none !important}.deensimc-button-group-wrapper{display:flex;align-items:center;gap:12px !important}.deensimc-pro-locked .slider[data-tooltip]::after{content:attr(data-tooltip);position:absolute;top:-38px;left:50%;transform:translateX(-50%) translateY(6px);background:#6d6d6d;color:#fff;font-size:12px;font-weight:600;padding:6px 14px;border-radius:4px;white-space:nowrap;opacity:0;visibility:hidden;pointer-events:none;transition:.2s ease;z-index:9999}.deensimc-pro-locked:hover .slider[data-tooltip]::after{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0)} -
marquee-addons-for-elementor/tags/3.9.15/assets/css/admin/notice.min.css
r3413371 r3447763 1 #deensimc-feedback-notice.deensimc-notice-wrap{display:flex;align-items:flex-start;border-left:4px solid #4f46e5;background:#fff;padding:20px;margin:20px 0;box-shadow:0 1px 3px rgba(0, 0, 0, 0.05)}.deensimc-notice-icon{width:48px;margin-right:20px}.deensimc-notice-icon img{width:100%;height:auto}.deensimc-notice-content h3{margin:0 0 8px;font-size:1.25em}.deensimc-notice-content p{margin:0 0 16px;color:#555d66}.deensimc-notice-content .button-primary{background-color:#4f46e5;border-color:#4f46e5;color:#fff;margin-right:8px}button.button.deensimc-never-show{margin-left:8px}.deensimc-dismiss-btn{background:transparent;border:1px solid #ccd0d4;color:#666}.deensimc-dismiss-btn:hover{background-color:#f0f0f0;color:#111}1 #deensimc-feedback-notice.deensimc-notice-wrap{display:flex;align-items:flex-start;border-left:4px solid #4f46e5;background:#fff;padding:20px;margin:20px 0;box-shadow:0 1px 3px rgba(0, 0, 0, 0.05)}.deensimc-notice-icon{width:48px;margin-right:20px}.deensimc-notice-icon img{width:100%;height:auto}.deensimc-notice-content{width:100%}.deensimc-notice-content h3{margin:0 0 8px;font-size:1.25em}.deensimc-notice-content p{margin:0 0 16px;color:#555d66}.deensimc-notice-content .button-primary{background-color:#4f46e5;border-color:#4f46e5;color:#fff}button.button.deensimc-never-show{margin-left:8px}.deensimc-notice-content .deensimc-dismiss-btns,.deensimc-notice-content .deensimc-action-btns{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.deensimc-notice-content .button-tertiary{border:none;background-color:transparent;padding:0}.deensimc-notice-content .button-tertiary:hover{background-color:transparent;color:#111}.deensimc-notice-content .deensimc-btns{display:flex;align-items:end;justify-content:space-between} -
marquee-addons-for-elementor/tags/3.9.15/assets/js/admin/admin.min.js
r3446117 r3447763 1 (function(e){"use strict";function t(t,n="info"){e(".deensimc-notice").remove();const i=`deensimc-notice ${n}`;const s=e('<div class="'+i+'">'+t+"</div>");e("body").prepend(s);setTimeout(function(){s.fadeOut(300,function(){e(this).remove()})},3e3)}window.marqueeAddonsAdmin=window.marqueeAddonsAdmin||{};window.marqueeAddonsAdmin.showNotification=t;e(document).ready(function(){e(".deensimc-see-demo-btn").on("click",function(e){e.stopPropagation()});e(".deensimc-tab-btn").on("click",function(){const t=e(this).data("tab");e(".deensimc-tab-btn").removeClass("active");e(this).addClass("active");e(".deensimc-tab-content").removeClass("active");e("#tab-"+t).addClass("active")});e(".deensimc-widget-card").on("click",function(t){const n=e(this);if(!n.hasClass("deensimc-pro-locked")){return}const i=e(t.target);if(i.closest(".deensimc-widget-toggle").length>0||i.is("input")||i.is("label")||i.hasClass("deensimc-slider")||i.hasClass("deensimc-toggle-label")){return}const s=n.attr("data-pro-url");if(s&&s!==""&&s!=="undefined"){window.open(s,"_blank")}else{}});e(".deensimc-widget-card.pro-locked").css({cursor:"pointer",transition:"all 0.3s ease"}).attr("title","Click to upgrade to PRO");e(".deensimc-widget-card.pro-locked").hover(function(){e(this).css("transform","translateY(-2px)")},function(){e(this).css("transform","translateY(0)")});e(".deensimc-widget-card.pro-locked .deensimc-widget-toggle").on("click",function(e){e.stopPropagation()});e("#enable-all").on("click",function(){e('.deensimc-widget-card input[type="checkbox"]').each(function(){if(!e(this).is(":disabled")){e(this).prop("checked",true).trigger("change")}});t("All available widgets are enabled now","success")});e("#disable-all").on("click",function(){e('.deensimc-widget-card input[type="checkbox"]').each(function(){if(!e(this).is(":disabled")){e(this).prop("checked",false).trigger("change")}});t("All available widgets are disabled now!","info")});e(".deensimc-switch input").on("change",function(){if(e(this).is(":disabled")){return}const t=e(this).closest(".deensimc-widget-toggle").find(".deensimc-toggle-label");if(e(this).is(":checked")){t.text("Enabled").css("color","#00a32a")}else{t.text("Disabled").css("color","#d63638")}});e(".deensimc-switch input").each(function(){const t=e(this).closest(".deensimc-widget-toggle").find(".deensimc-toggle-label");if(e(this).is(":disabled")){t.text("Locked").css("color","#856404");return}if(e(this).is(":checked")){t.css("color","#00a32a")}else{t.text("Disabled").css("color","#d63638")}});e(".deensimc-addons-settings form").on("submit",function(t){const n=e(this).find("#submit");n.prop("disabled",true).val("Saving...")});const n=new URLSearchParams(window.location.search);if(n.get("settings-updated")==="true"){t("Settings saved successfully!","success");const e=window.location.pathname+window.location.search.replace(/[?&]settings-updated=true/,"").replace(/^&/,"?");window.history.replaceState({},"",e||window.location.pathname)}const i=function(){const t=e(".deensimc-widget-card input:checked:not(:disabled)").length;const n=e(".deensimc-widget-card").length;if(e("#widget-count").length===0){const i=`\n <div id="widget-count" style="margin-top: 15px; color: #646970; font-size: 13px;">\n <strong>${t}</strong> of <strong>${n}</strong> available widgets enabled\n </div>\n `;e(".deensimc-description").after(i)}else{e("#widget-count").html(`<strong>${t}</strong> of <strong>${n}</strong> available widgets enabled`)}};i();e(".deensimc-widget-card input").on("change",i);e(document).on("keydown",function(t){if((t.ctrlKey||t.metaKey)&&t.which===83){t.preventDefault();e("form").submit()}});if(window.location.hash){const t=window.location.hash.substring(1);if(t==="widgets"||t==="general"){e('.deensimc-tab-btn[data-tab="'+t+'"]').click()}}e(".deensimc-tab-btn").on("click",function(){const t=e(this).data("tab");window.location.hash=t});e("form").on("submit",function(){e(".deensimc-settings-container").addClass("deensimc-loading")});let s=false;e("form input, form select, form textarea").on("change",function(){s=true});e("form").on("submit",function(){s=false});e(window).on("beforeunload",function(){if(s){return"You have unsaved changes. Are you sure you want to leave?"}})});e(".deensimc-enable-category").on("click",function(){const n=e(this).data("category");e(`.deensimc-widget-card[data-category="${n}"] input[type="checkbox"]`).each(function(){if(!e(this).is(":disabled")){e(this).prop("checked",true).trigger("change")}});t(`All ${n} items enabled successfully!`,"success")});e(".deensimc-disable-category").on("click",function(){const n=e(this).data("category");e(`.deensimc-widget-card[data-category="${n}"] input[type="checkbox"]`).each(function(){if(!e(this).is(":disabled")){e(this).prop("checked",false).trigger("change")}});t(`All ${n} items disabled successfully!`,"info")})})(jQuery);1 (function(e){"use strict";function t(t,n="info"){e(".deensimc-notice").remove();const i=`deensimc-notice ${n}`;const c=e('<div class="'+i+'">'+t+"</div>");e("body").prepend(c);setTimeout(function(){c.fadeOut(300,function(){e(this).remove()})},3e3)}window.marqueeAddonsAdmin=window.marqueeAddonsAdmin||{};window.marqueeAddonsAdmin.showNotification=t;e(document).ready(function(){e(".deensimc-see-demo-btn").on("click",function(e){e.stopPropagation()});e(".deensimc-tab-btn").on("click",function(){const t=e(this).data("tab");e(".deensimc-tab-btn").removeClass("active");e(this).addClass("active");e(".deensimc-tab-content").removeClass("active");e("#tab-"+t).addClass("active")});e(".deensimc-widget-card").on("click",function(t){const n=e(this);if(!n.hasClass("deensimc-pro-locked")){return}const i=e(t.target);if(i.closest(".deensimc-widget-toggle").length>0||i.is("input")||i.is("label")||i.hasClass("deensimc-slider")||i.hasClass("deensimc-toggle-label")){return}const c=n.attr("data-pro-url");if(c&&c!==""&&c!=="undefined"){window.open(c,"_blank")}else{}});e(".deensimc-widget-card.pro-locked").css({cursor:"pointer",transition:"all 0.3s ease"}).attr("title","Click to upgrade to PRO");e(".deensimc-widget-card.pro-locked").hover(function(){e(this).css("transform","translateY(-2px)")},function(){e(this).css("transform","translateY(0)")});e(".deensimc-widget-card.pro-locked .deensimc-widget-toggle").on("click",function(e){e.stopPropagation()});e("#enable-all").on("click",function(){e('.deensimc-widget-card input[type="checkbox"]').each(function(){if(!e(this).is(":disabled")){e(this).prop("checked",true).trigger("change")}});t("All available widgets are enabled now","success")});e("#disable-all").on("click",function(){e('.deensimc-widget-card input[type="checkbox"]').each(function(){if(!e(this).is(":disabled")){e(this).prop("checked",false).trigger("change")}});t("All available widgets are disabled now!","info")});e(".deensimc-switch input").on("change",function(){setTimeout(()=>{e("#submit").click();e(".deensimc-widget-card").css({opacity:"0.5","pointer-events":"none"})},100)});e(".deensimc-addons-settings form").on("submit",function(t){const n=e(this).find("#submit");n.prop("disabled",true).val("Saving...")});const n=new URLSearchParams(window.location.search);if(n.get("settings-updated")==="true"){t("Settings saved successfully!","success");const e=window.location.pathname+window.location.search.replace(/[?&]settings-updated=true/,"").replace(/^&/,"?");window.history.replaceState({},"",e||window.location.pathname)}const i=function(){const t=e(".deensimc-widget-card input:checked:not(:disabled)").length;const n=e(".deensimc-widget-card").length;if(e("#widget-count").length===0){const i=`\n <div id="widget-count" style="margin-top: 15px; color: #646970; font-size: 13px;">\n <strong>${t}</strong> of <strong>${n}</strong> available widgets enabled\n </div>\n `;e(".deensimc-description").after(i)}else{e("#widget-count").html(`<strong>${t}</strong> of <strong>${n}</strong> available widgets enabled`)}};i();e(".deensimc-widget-card input").on("change",i);e(document).on("keydown",function(t){if((t.ctrlKey||t.metaKey)&&t.which===83){t.preventDefault();e("form").submit()}});if(window.location.hash){const t=window.location.hash.substring(1);if(t==="widgets"||t==="general"){e('.deensimc-tab-btn[data-tab="'+t+'"]').click()}}e(".deensimc-tab-btn").on("click",function(){const t=e(this).data("tab");window.location.hash=t});let c=false;e("form input, form select, form textarea").on("change",function(){c=true});e("form").on("submit",function(){c=false});e(window).on("beforeunload",function(){if(c){return"You have unsaved changes. Are you sure you want to leave?"}})});e(".deensimc-enable-category").on("click",function(){const n=e(this).data("category");e(`.deensimc-widget-card[data-category="${n}"] input[type="checkbox"]`).each(function(){if(!e(this).is(":disabled")){e(this).prop("checked",true).trigger("change")}});t(`All ${n} items enabled successfully!`,"success")});e(".deensimc-disable-category").on("click",function(){const n=e(this).data("category");e(`.deensimc-widget-card[data-category="${n}"] input[type="checkbox"]`).each(function(){if(!e(this).is(":disabled")){e(this).prop("checked",false).trigger("change")}});t(`All ${n} items disabled successfully!`,"info")})})(jQuery); -
marquee-addons-for-elementor/tags/3.9.15/assets/js/handle-animation-duration.min.js
r3413371 r3447763 1 (function( e,n){"use strict";function t(n){const t=n.find(".deensimc-marquee-main-container");const i=n.find(".deensimc-marquee-track");const a=t.data("is-marquee-on")??true;const c=t.data("marquee-speed");const s=!window.matchMedia("(max-width: 767px)").matches&&i.closest(".deensimc-marquee-vertical").length>0;if(a&&i.length){let n=0;i.each((e,t)=>{n+=s?t.scrollHeight:t.scrollWidth});const t=10;const a=c*t;const o=n/a;i.each((n,t)=>{e(t).css("animation-duration",`${o}s`)})}}window.handleAnimationDuration=t})(jQuery,window._);1 (function(n,e){"use strict";function t(e){const t=e.find(".deensimc-marquee-main-container");const c=e.find(".deensimc-marquee-track");const i=t.data("is-marquee-on")??true;const s=t.data("marquee-speed");const a=c.closest(".deensimc-marquee-vertical").length>0;if(i&&c.length){let e=0;c.each((n,t)=>{e+=a?t.scrollHeight:t.scrollWidth});const t=10;const i=s*t;const o=e/i;c.each((e,t)=>{n(t).css("animation-duration",`${o}s`)})}}window.handleAnimationDuration=t})(jQuery,window._); -
marquee-addons-for-elementor/tags/3.9.15/base.php
r3446507 r3447763 6 6 { 7 7 private static $_instance = null; 8 const VERSION = '3.9.1 4';8 const VERSION = '3.9.15'; 9 9 10 10 public function __construct() -
marquee-addons-for-elementor/tags/3.9.15/includes/widget.php
r3446507 r3447763 9 9 use Deensimcpro_Promo; 10 10 11 const VERSION = '3.9.1 4';11 const VERSION = '3.9.15'; 12 12 const MINIMUM_ELEMENTOR_VERSION = '3.5.0'; 13 13 const MINIMUM_PHP_VERSION = '7.4'; … … 217 217 echo ' </div>'; 218 218 echo ' <div class="deensimc-notice-content">'; 219 echo ' <h3>Upgrade to Marquee Addons Pro</h3>'; 220 echo ' <p>Unlock more advance widgets and make your Elementor website 10x better with Marquee Addons.</p>'; 221 echo ' <a href="https://marqueeaddons.com/pricing/" target="_blank" class="button button-primary">Upgrade to Pro</a>'; 219 echo ' <h3>Enjoying Marquee Addons?</h3>'; 220 echo ' <p>A quick rating helps other Elementor users discover Marquee Addons. You can also share feature ideas or suggestions to help us improve.</p>'; 221 echo ' <div class="deensimc-btns">'; 222 echo ' <div class="deensimc-action-btns">'; 222 223 echo ' <a href="https://wordpress.org/support/plugin/marquee-addons-for-elementor/reviews/#new-post" target="_blank" class="button button-primary">Rate Us</a>'; 223 echo ' <button class="button deensimc-dismiss-btn">Remind me later</button>'; 224 echo ' <button class="button deensimc-never-show">Don\'t show me again</button>'; 224 echo ' <a href="https://wordpress.org/support/plugin/marquee-addons-for-elementor/" target="_blank" class="button"> Feature Request</a>'; 225 echo ' <a href="https://marqueeaddons.com/pricing/" target="_blank" class="button">Upgrade to Pro</a>'; 226 echo ' </div>'; 227 echo ' <div class="deensimc-dismiss-btns">'; 228 echo ' <button class="button deensimc-dismiss-btn button-tertiary">Remind me later</button>'; 229 echo ' <button class="button deensimc-never-show button-tertiary">Don\'t show me again</button>'; 230 echo ' </div>'; 231 echo ' </div>'; 225 232 echo ' </div>'; 226 233 echo '</div>'; … … 429 436 ] 430 437 ); 431 438 432 439 // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound 433 440 if (!class_exists('\Deensimcpro_Marquee\Marqueepro') || !apply_filters('marquee_addons_is_license_active', false)) { -
marquee-addons-for-elementor/tags/3.9.15/includes/widgets/class-deensimc-text-marquee.php
r3436552 r3447763 19 19 use Deensimc_Promotional_Banner; 20 20 use Deensimc_Textmarquee_Content_Text_Repeater; 21 use Deensimc_Textmarquee_Layout_Controls; 21 22 use Deensimc_Marquee_Controls; 22 23 use Deensimc_Textmarquee_Style_Text_Contents; … … 68 69 $this->content_text_repeater(); 69 70 $this->register_marquee_control('deensimc_text_marquee_options'); 70 71 71 $this->style_text_contents(); 72 $this->register_layout_controls(); 72 73 $this->register_style_edge_shadow('deensimc_text_marquee_edge_shadow'); 73 74 } … … 134 135 $settings = $this->get_settings_for_display(); 135 136 $texts = $settings['deensimc_repeater_text_main']; 136 $tag = self::validate_html_tag( $settings['deensimc_text_marquee_tag']);137 $tag = self::validate_html_tag($settings['deensimc_text_marquee_tag']); 137 138 138 139 $is_vertical = $settings['deensimc_marquee_vertical_orientation'] === 'yes'; … … 177 178 <div class="deensimc-marquee-track-wrapper"> 178 179 <div class="deensimc-marquee-track"> 179 <?php $this->render_marquee_texts($texts, $is_vertical, $tag, 'track-1') ?>180 <?php $this->render_marquee_texts($texts, $is_vertical, $tag, 'track-1') ?> 180 181 </div> 181 182 <div aria-hidden="true" class="deensimc-marquee-track"> -
marquee-addons-for-elementor/tags/3.9.15/includes/widgets/traits/text-marquee/style-text-contents.php
r3420892 r3447763 81 81 82 82 $this->end_controls_tabs(); 83 84 $this->add_responsive_control(85 'deensimc_widget_height',86 [87 'label' => esc_html__('Section Height', 'marquee-addons-for-elementor'),88 'type' => Controls_Manager::SLIDER,89 'size_units' => ['vh'],90 'range' => [91 'vh' => [92 'min' => 1,93 'max' => 100,94 'step' => 1,95 ],96 ],97 98 'default' => [99 'unit' => 'vh',100 'size' => 60,101 ],102 'condition' => [103 'deensimc_marquee_vertical_orientation' => 'yes',104 ],105 'selectors' => [106 '{{WRAPPER}} .deensimc-marquee-vertical.deensimc-marquee-main-container' => 'height: {{SIZE}}vh;',107 ],108 ]109 );110 83 111 84 … … 213 186 ] 214 187 ); 215 216 $this->add_responsive_control(217 'deensimc_icon_adjust_vertical_position',218 [219 'label' => esc_html__('Adjust Vertical Position', 'marquee-addons-for-elementor'),220 'type' => Controls_Manager::SLIDER,221 'size_units' => ['px', 'em', 'rem'],222 'range' => [223 'px' => [224 'min' => -16,225 'max' => 16,226 'step' => 1,227 ],228 'em' => [229 'min' => -1,230 'max' => 1,231 'step' => 0.1,232 ],233 'rem' => [234 'min' => -1,235 'max' => 1,236 'step' => 0.1,237 ],238 ],239 'default' => [240 'unit' => 'px',241 'size' => 0,242 ],243 'selectors' => [244 '{{WRAPPER}} .deensimc-text-wrapper svg' => 'margin-block: {{SIZE}}{{UNIT}};',245 '{{WRAPPER}} .deensimc-text-wrapper i' => 'margin-block: {{SIZE}}{{UNIT}};',246 ],247 'condition' => [248 'deensimc_marquee_vertical_orientation' => 'yes',249 ],250 ]251 );252 188 // animation 253 189 $this->add_control( -
marquee-addons-for-elementor/tags/3.9.15/marquee-addons-for-elementor.php
r3446507 r3447763 4 4 * Plugin Name: Marquee Addons for Elementor - Essential Motion Widgets & Templates 5 5 * Description: Marquee Addons an Elementor addon to create smooth, endless marquee carousels, showcases images, logos, or content with dynamic movement to engage visitors. It also allows you to create image accordions, stacked sliders, and text marquees. 6 * Version: 3.9.1 46 * Version: 3.9.15 7 7 * Requires at least: 5.8 8 8 * Requires PHP: 7.4 … … 26 26 define('DEENSIMC_PATH', plugin_dir_path(__FILE__)); 27 27 define('DEENSIMC_ASSETS_URL', DEENSIMC_URL . 'assets/'); 28 define('DEENSIMC_VERSION', '3.9.1 4');28 define('DEENSIMC_VERSION', '3.9.15'); 29 29 30 30 function deensimc_load_plugin_data(): void -
marquee-addons-for-elementor/tags/3.9.15/readme.txt
r3446507 r3447763 4 4 Requires at least: 5.8 5 5 Tested up to: 6.9 6 Stable tag: 3.9.1 46 Stable tag: 3.9.15 7 7 Requires PHP: 7.4 8 8 License: GPLv2 or later … … 266 266 == Changelog == 267 267 268 = 3.9.15 - 2026-01-25 = 269 - Fix: Fixed an issue where animation speed increased on mobile. 270 - New: Separated the Section Height control for Vertical Text Marquee for improved structure. 271 - Fix: Removed the Icon Adjust Vertical Position control. 272 - New: Implemented widget enable/disable functionality on toggle change for better user control. 273 268 274 = 3.9.14 - 2026-01-25 = 269 275 - Fix: Render only valid images in the gallery in Image Marquee. 270 - Fix: Removed extra whitespace testimonial card in Testimonial marquee.276 - Fix: Removed extra whitespace from testimonial card in Testimonial marquee. 271 277 272 278 = 3.9.13 - 2026-01-24 = -
marquee-addons-for-elementor/trunk/assets/css/admin/admin.min.css
r3446117 r3447763 1 a.toplevel_page_marquee-addons-settings .wp-menu-image img{width:23px;margin-top:-3px}.deensimc-addons-settings{margin-top:20px}.deensimc-marquee-settings-container{background:#fff;border:1px solid #ccd0d4;box-shadow:0 1px 1px rgba(0, 0, 0, 0.04);margin-top:20px}.deensimc-tabs{display:flex;border-bottom:1px solid #ccd0d4;background:#f3f4f5}.deensimc-tab-btn{padding:15px 25px;background:transparent;border:none;cursor:pointer;font-size:14px;font-weight:500;color:#555;border-bottom:3px solid transparent;transition:all .3s ease;display:flex;align-items:center;gap:8px}.deensimc-tab-btn:hover{background:#fff;color:#7456ff}.deensimc-tab-btn.active{background:#fff;color:#7456ff;border-bottom-color:#7456ff}.deensimc-tab-btn .dashicons{font-size:18px;width:18px;height:18px}.deensimc-tab-content{display:none;padding:24px}.deensimc-tab-content.active{display:block}.deensimc-section{margin-bottom:30px}.deensimc-section-header{margin-bottom:25px;display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.deensimc-section-header h2{margin:0;font-size:20px;line-height:1.5}.deensimc-section-header p.deensimc-description{font-size:13px;color:#646970;margin:0;margin-bottom:15px}.deensimc-bulk-actions{display:flex;gap:12px}.deensimc-settings-container{background-color:#fff;border-radius:8px;overflow:hidden;margin-top:20px}.deensimc-settings-container .deensimc-enable-btn{border:1px solid #7456ff;color:#7456ff;background-color:#fff}.deensimc-settings-container .deensimc-disable-btn{border:1px solid red;color:red;background-color:#fff}.deensimc- settings-footer #submit{background-color:#7456ff;border-color:#7456ff}.deensimc-category-section{margin:30px 0 20px 0}.deensimc-category-title{font-size:18px;margin:0 0 20px 0;padding:0;color:#1d2327}.deensimc-widgets-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(300px, 1fr));gap:20px}.deensimc-widget-card{border:1px solid #ddd;border-radius:8px;padding:24px;background:#fff;transition:all .3s ease;box-shadow:0 0 4px 0 rgba(0, 0, 0, 0.1);position:relative;overflow:hidden}.deensimc-widget-card:hover{box-shadow:0 4px 8px rgba(0, 0, 0, 0.2);transform:translateY(-2px)}.deensimc-widget-header{display:flex;align-items:center;gap:10px;margin-bottom:12px}.deensimc-widget-header .dashicons{font-size:24px;width:24px;height:24px;color:#7456ff}.deensimc-widget-custom-icon{width:24px;height:24px;object-fit:contain}.deensimc-settings-header{padding:0}.deensimc-widget-header h3{margin:0;font-size:16px;font-weight:600;flex:1}.deensimc-pro-badge{background:linear-gradient(135deg, #667eea 0%, #764ba2 100%);color:#fff;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;user-select:none;position:absolute;left:0;top:0;transform:rotateZ(-45deg) translate(-26%, -80%);width:80px;display:flex;align-items:center;justify-content:center}.deensimc-widget-description{color:#646970;font-size:13px;line-height:1.5;margin:0 0 15px 0}.deensimc-widget-toggle{display:flex;align-items:center;gap:12px}.deensimc-toggle-label{font-size:13px;color:#646970;font-weight:500}.deensimc-pro-lock-notice{display:flex;align-items:center;gap:8px;padding:10px 12px;background:#fff3cd;border:1px solid #ffc107;border-radius:4px;margin:10px 0;font-size:12px;color:#856404}.deensimc-pro-lock-notice .dashicons{font-size:16px;width:16px;height:16px}.deensimc-switch{position:relative;display:inline-block;width:32px;height:18px}.deensimc-switch.disabled{opacity:.5;cursor:not-allowed}.deensimc-switch.disabled .slider{cursor:not-allowed}.deensimc-switch input{opacity:0;width:0;height:0}.deensimc-switch .slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;transition:.3s;border-radius:24px}.deensimc-switch .slider:before{position:absolute;content:"";height:12px;width:12px;left:3px;bottom:3px;background-color:white;transition:.3s;border-radius:50%}.deensimc-switch input:checked+.slider{background-color:#7456ff}.deensimc-switch input:focus+.slider{box-shadow:0 0 1px #7456ff}.deensimc-switch input:checked+.slider:before{transform:translateX(14px)}.deensimc-settings-footer{padding:20px 30px;background:#f9f9f9;border-top:1px solid #ccd0d4;display:flex;gap:10px;align-items:center}.deensimc-tab-content .form-table th{padding:20px 10px 20px 0;width:220px}.deensimc-tab-content .form-table td{padding:20px 10px}.deensimc-tab-content .form-table .description{margin-top:8px}.deensimc-toggle-demo-wrapper{display:flex;align-items:center;justify-content:space-between}.deensimc-see-demo-btn{color:#7456ff;font-weight:500}@media screen and (max-width: 782px){.deensimc-widgets-grid{grid-template-columns:1fr}.deensimc-tab-content{padding:20px}.deensimc-settings-footer{padding:15px 20px;flex-direction:column;align-items:stretch}.deensimc-settings-footer .button{width:100%;text-align:center}}div.deensimc-notice{position:fixed;right:0;top:32px;margin:20px 0;padding:12px 15px;border-left:4px solid lime;background:#f8fff8;box-shadow:0 1px 1px rgba(0, 0, 0, 0.04)}div.deensimc-notice.error{border-left-color:#d63638;background:#fff6f6}div.deensimc-notice.info{border-left-color:#7456ff;background:#f8f7ff}.deensimc-loading{opacity:.6;pointer-events:none}.deensimc-loading::after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);border:3px solid #f3f3f3;border-top:3px solid #2271b1;border-radius:50%;width:40px;height:40px;animation:deensimc-spin 1s linear infinite}@keyframes deensimc-spin{0%{transform:translate(-50%, -50%) rotate(0deg)}100%{transform:translate(-50%, -50%) rotate(360deg)}}.deensimc-toggle-label{transition:color .3s ease}.deensimc-switch.deensimc-pro-locked:focus,.deensimc-switch.deensimc-pro-locked:active,.deensimc-see-demo-btn:focus,.deensimc-see-demo-btn:active{outline:none !important;box-shadow:none !important}.deensimc-button-group-wrapper{display:flex;align-items:center;gap:12px !important}.deensimc-pro-locked .slider[data-tooltip]::after{content:attr(data-tooltip);position:absolute;top:-38px;left:50%;transform:translateX(-50%) translateY(6px);background:#6d6d6d;color:#fff;font-size:12px;font-weight:600;padding:6px 14px;border-radius:4px;white-space:nowrap;opacity:0;visibility:hidden;pointer-events:none;transition:.2s ease;z-index:9999}.deensimc-pro-locked:hover .slider[data-tooltip]::after{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0)}1 a.toplevel_page_marquee-addons-settings .wp-menu-image img{width:23px;margin-top:-3px}.deensimc-addons-settings{margin-top:20px}.deensimc-marquee-settings-container{background:#fff;border:1px solid #ccd0d4;box-shadow:0 1px 1px rgba(0, 0, 0, 0.04);margin-top:20px}.deensimc-tabs{display:flex;border-bottom:1px solid #ccd0d4;background:#f3f4f5}.deensimc-tab-btn{padding:15px 25px;background:transparent;border:none;cursor:pointer;font-size:14px;font-weight:500;color:#555;border-bottom:3px solid transparent;transition:all .3s ease;display:flex;align-items:center;gap:8px}.deensimc-tab-btn:hover{background:#fff;color:#7456ff}.deensimc-tab-btn.active{background:#fff;color:#7456ff;border-bottom-color:#7456ff}.deensimc-tab-btn .dashicons{font-size:18px;width:18px;height:18px}.deensimc-tab-content{display:none;padding:24px}.deensimc-tab-content.active{display:block}.deensimc-section{margin-bottom:30px}.deensimc-section-header{margin-bottom:25px;display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.deensimc-section-header h2{margin:0;font-size:20px;line-height:1.5}.deensimc-section-header p.deensimc-description{font-size:13px;color:#646970;margin:0;margin-bottom:15px}.deensimc-bulk-actions{display:flex;gap:12px}.deensimc-settings-container{background-color:#fff;border-radius:8px;overflow:hidden;margin-top:20px}.deensimc-settings-container .deensimc-enable-btn{border:1px solid #7456ff;color:#7456ff;background-color:#fff}.deensimc-settings-container .deensimc-disable-btn{border:1px solid red;color:red;background-color:#fff}.deensimc-category-section{margin:30px 0 20px 0}.deensimc-category-title{font-size:18px;margin:0 0 20px 0;padding:0;color:#1d2327}.deensimc-widgets-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(300px, 1fr));gap:20px}.deensimc-widget-card{border:1px solid #ddd;border-radius:8px;padding:24px;background:#fff;transition:all .3s ease;box-shadow:0 0 4px 0 rgba(0, 0, 0, 0.1);position:relative;overflow:hidden}.deensimc-widget-card:hover{box-shadow:0 4px 8px rgba(0, 0, 0, 0.2);transform:translateY(-2px)}.deensimc-widget-header{display:flex;align-items:center;gap:10px;margin-bottom:12px}.deensimc-widget-header .dashicons{font-size:24px;width:24px;height:24px;color:#7456ff}.deensimc-widget-custom-icon{width:24px;height:24px;object-fit:contain}.deensimc-settings-header{padding:0}.deensimc-widget-header h3{margin:0;font-size:16px;font-weight:600;flex:1}.deensimc-pro-badge{background:linear-gradient(135deg, #667eea 0%, #764ba2 100%);color:#fff;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;user-select:none;position:absolute;left:0;top:0;transform:rotateZ(-45deg) translate(-26%, -80%);width:80px;display:flex;align-items:center;justify-content:center}.deensimc-widget-description{color:#646970;font-size:13px;line-height:1.5;margin:0 0 15px 0}.deensimc-widget-toggle{display:flex;align-items:center;gap:12px}.deensimc-toggle-label{font-size:13px;color:#646970;font-weight:500}.deensimc-pro-lock-notice{display:flex;align-items:center;gap:8px;padding:10px 12px;background:#fff3cd;border:1px solid #ffc107;border-radius:4px;margin:10px 0;font-size:12px;color:#856404}.deensimc-pro-lock-notice .dashicons{font-size:16px;width:16px;height:16px}.deensimc-switch{position:relative;display:inline-block;width:32px;height:18px}.deensimc-switch.disabled{opacity:.5;cursor:not-allowed}.deensimc-switch.disabled .slider{cursor:not-allowed}.deensimc-switch input{opacity:0;width:0;height:0}.deensimc-switch .slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;transition:.3s;border-radius:24px}.deensimc-switch .slider:before{position:absolute;content:"";height:12px;width:12px;left:3px;bottom:3px;background-color:white;transition:.3s;border-radius:50%}.deensimc-switch input:checked+.slider{background-color:#7456ff}.deensimc-switch input:focus+.slider{box-shadow:0 0 1px #7456ff}.deensimc-switch input:checked+.slider:before{transform:translateX(14px)}.deensimc-settings-footer{display:none}.deensimc-tab-content .form-table th{padding:20px 10px 20px 0;width:220px}.deensimc-tab-content .form-table td{padding:20px 10px}.deensimc-tab-content .form-table .description{margin-top:8px}.deensimc-toggle-demo-wrapper{display:flex;align-items:center;justify-content:space-between}.deensimc-see-demo-btn{color:#7456ff;font-weight:500}@media screen and (max-width: 782px){.deensimc-widgets-grid{grid-template-columns:1fr}.deensimc-tab-content{padding:20px}}div.deensimc-notice{position:fixed;right:0;top:32px;margin:20px 0;padding:12px 15px;border-left:4px solid lime;background:#f8fff8;box-shadow:0 1px 1px rgba(0, 0, 0, 0.04)}div.deensimc-notice.error{border-left-color:#d63638;background:#fff6f6}div.deensimc-notice.info{border-left-color:#7456ff;background:#f8f7ff}.deensimc-loading{opacity:.6;pointer-events:none}.deensimc-loading::after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);border:3px solid #f3f3f3;border-top:3px solid #2271b1;border-radius:50%;width:40px;height:40px;animation:deensimc-spin 1s linear infinite}@keyframes deensimc-spin{0%{transform:translate(-50%, -50%) rotate(0deg)}100%{transform:translate(-50%, -50%) rotate(360deg)}}.deensimc-toggle-label{transition:color .3s ease}.deensimc-switch.deensimc-pro-locked:focus,.deensimc-switch.deensimc-pro-locked:active,.deensimc-see-demo-btn:focus,.deensimc-see-demo-btn:active{outline:none !important;box-shadow:none !important}.deensimc-button-group-wrapper{display:flex;align-items:center;gap:12px !important}.deensimc-pro-locked .slider[data-tooltip]::after{content:attr(data-tooltip);position:absolute;top:-38px;left:50%;transform:translateX(-50%) translateY(6px);background:#6d6d6d;color:#fff;font-size:12px;font-weight:600;padding:6px 14px;border-radius:4px;white-space:nowrap;opacity:0;visibility:hidden;pointer-events:none;transition:.2s ease;z-index:9999}.deensimc-pro-locked:hover .slider[data-tooltip]::after{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0)} -
marquee-addons-for-elementor/trunk/assets/css/admin/notice.min.css
r3413371 r3447763 1 #deensimc-feedback-notice.deensimc-notice-wrap{display:flex;align-items:flex-start;border-left:4px solid #4f46e5;background:#fff;padding:20px;margin:20px 0;box-shadow:0 1px 3px rgba(0, 0, 0, 0.05)}.deensimc-notice-icon{width:48px;margin-right:20px}.deensimc-notice-icon img{width:100%;height:auto}.deensimc-notice-content h3{margin:0 0 8px;font-size:1.25em}.deensimc-notice-content p{margin:0 0 16px;color:#555d66}.deensimc-notice-content .button-primary{background-color:#4f46e5;border-color:#4f46e5;color:#fff;margin-right:8px}button.button.deensimc-never-show{margin-left:8px}.deensimc-dismiss-btn{background:transparent;border:1px solid #ccd0d4;color:#666}.deensimc-dismiss-btn:hover{background-color:#f0f0f0;color:#111}1 #deensimc-feedback-notice.deensimc-notice-wrap{display:flex;align-items:flex-start;border-left:4px solid #4f46e5;background:#fff;padding:20px;margin:20px 0;box-shadow:0 1px 3px rgba(0, 0, 0, 0.05)}.deensimc-notice-icon{width:48px;margin-right:20px}.deensimc-notice-icon img{width:100%;height:auto}.deensimc-notice-content{width:100%}.deensimc-notice-content h3{margin:0 0 8px;font-size:1.25em}.deensimc-notice-content p{margin:0 0 16px;color:#555d66}.deensimc-notice-content .button-primary{background-color:#4f46e5;border-color:#4f46e5;color:#fff}button.button.deensimc-never-show{margin-left:8px}.deensimc-notice-content .deensimc-dismiss-btns,.deensimc-notice-content .deensimc-action-btns{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.deensimc-notice-content .button-tertiary{border:none;background-color:transparent;padding:0}.deensimc-notice-content .button-tertiary:hover{background-color:transparent;color:#111}.deensimc-notice-content .deensimc-btns{display:flex;align-items:end;justify-content:space-between} -
marquee-addons-for-elementor/trunk/assets/js/admin/admin.min.js
r3446117 r3447763 1 (function(e){"use strict";function t(t,n="info"){e(".deensimc-notice").remove();const i=`deensimc-notice ${n}`;const s=e('<div class="'+i+'">'+t+"</div>");e("body").prepend(s);setTimeout(function(){s.fadeOut(300,function(){e(this).remove()})},3e3)}window.marqueeAddonsAdmin=window.marqueeAddonsAdmin||{};window.marqueeAddonsAdmin.showNotification=t;e(document).ready(function(){e(".deensimc-see-demo-btn").on("click",function(e){e.stopPropagation()});e(".deensimc-tab-btn").on("click",function(){const t=e(this).data("tab");e(".deensimc-tab-btn").removeClass("active");e(this).addClass("active");e(".deensimc-tab-content").removeClass("active");e("#tab-"+t).addClass("active")});e(".deensimc-widget-card").on("click",function(t){const n=e(this);if(!n.hasClass("deensimc-pro-locked")){return}const i=e(t.target);if(i.closest(".deensimc-widget-toggle").length>0||i.is("input")||i.is("label")||i.hasClass("deensimc-slider")||i.hasClass("deensimc-toggle-label")){return}const s=n.attr("data-pro-url");if(s&&s!==""&&s!=="undefined"){window.open(s,"_blank")}else{}});e(".deensimc-widget-card.pro-locked").css({cursor:"pointer",transition:"all 0.3s ease"}).attr("title","Click to upgrade to PRO");e(".deensimc-widget-card.pro-locked").hover(function(){e(this).css("transform","translateY(-2px)")},function(){e(this).css("transform","translateY(0)")});e(".deensimc-widget-card.pro-locked .deensimc-widget-toggle").on("click",function(e){e.stopPropagation()});e("#enable-all").on("click",function(){e('.deensimc-widget-card input[type="checkbox"]').each(function(){if(!e(this).is(":disabled")){e(this).prop("checked",true).trigger("change")}});t("All available widgets are enabled now","success")});e("#disable-all").on("click",function(){e('.deensimc-widget-card input[type="checkbox"]').each(function(){if(!e(this).is(":disabled")){e(this).prop("checked",false).trigger("change")}});t("All available widgets are disabled now!","info")});e(".deensimc-switch input").on("change",function(){if(e(this).is(":disabled")){return}const t=e(this).closest(".deensimc-widget-toggle").find(".deensimc-toggle-label");if(e(this).is(":checked")){t.text("Enabled").css("color","#00a32a")}else{t.text("Disabled").css("color","#d63638")}});e(".deensimc-switch input").each(function(){const t=e(this).closest(".deensimc-widget-toggle").find(".deensimc-toggle-label");if(e(this).is(":disabled")){t.text("Locked").css("color","#856404");return}if(e(this).is(":checked")){t.css("color","#00a32a")}else{t.text("Disabled").css("color","#d63638")}});e(".deensimc-addons-settings form").on("submit",function(t){const n=e(this).find("#submit");n.prop("disabled",true).val("Saving...")});const n=new URLSearchParams(window.location.search);if(n.get("settings-updated")==="true"){t("Settings saved successfully!","success");const e=window.location.pathname+window.location.search.replace(/[?&]settings-updated=true/,"").replace(/^&/,"?");window.history.replaceState({},"",e||window.location.pathname)}const i=function(){const t=e(".deensimc-widget-card input:checked:not(:disabled)").length;const n=e(".deensimc-widget-card").length;if(e("#widget-count").length===0){const i=`\n <div id="widget-count" style="margin-top: 15px; color: #646970; font-size: 13px;">\n <strong>${t}</strong> of <strong>${n}</strong> available widgets enabled\n </div>\n `;e(".deensimc-description").after(i)}else{e("#widget-count").html(`<strong>${t}</strong> of <strong>${n}</strong> available widgets enabled`)}};i();e(".deensimc-widget-card input").on("change",i);e(document).on("keydown",function(t){if((t.ctrlKey||t.metaKey)&&t.which===83){t.preventDefault();e("form").submit()}});if(window.location.hash){const t=window.location.hash.substring(1);if(t==="widgets"||t==="general"){e('.deensimc-tab-btn[data-tab="'+t+'"]').click()}}e(".deensimc-tab-btn").on("click",function(){const t=e(this).data("tab");window.location.hash=t});e("form").on("submit",function(){e(".deensimc-settings-container").addClass("deensimc-loading")});let s=false;e("form input, form select, form textarea").on("change",function(){s=true});e("form").on("submit",function(){s=false});e(window).on("beforeunload",function(){if(s){return"You have unsaved changes. Are you sure you want to leave?"}})});e(".deensimc-enable-category").on("click",function(){const n=e(this).data("category");e(`.deensimc-widget-card[data-category="${n}"] input[type="checkbox"]`).each(function(){if(!e(this).is(":disabled")){e(this).prop("checked",true).trigger("change")}});t(`All ${n} items enabled successfully!`,"success")});e(".deensimc-disable-category").on("click",function(){const n=e(this).data("category");e(`.deensimc-widget-card[data-category="${n}"] input[type="checkbox"]`).each(function(){if(!e(this).is(":disabled")){e(this).prop("checked",false).trigger("change")}});t(`All ${n} items disabled successfully!`,"info")})})(jQuery);1 (function(e){"use strict";function t(t,n="info"){e(".deensimc-notice").remove();const i=`deensimc-notice ${n}`;const c=e('<div class="'+i+'">'+t+"</div>");e("body").prepend(c);setTimeout(function(){c.fadeOut(300,function(){e(this).remove()})},3e3)}window.marqueeAddonsAdmin=window.marqueeAddonsAdmin||{};window.marqueeAddonsAdmin.showNotification=t;e(document).ready(function(){e(".deensimc-see-demo-btn").on("click",function(e){e.stopPropagation()});e(".deensimc-tab-btn").on("click",function(){const t=e(this).data("tab");e(".deensimc-tab-btn").removeClass("active");e(this).addClass("active");e(".deensimc-tab-content").removeClass("active");e("#tab-"+t).addClass("active")});e(".deensimc-widget-card").on("click",function(t){const n=e(this);if(!n.hasClass("deensimc-pro-locked")){return}const i=e(t.target);if(i.closest(".deensimc-widget-toggle").length>0||i.is("input")||i.is("label")||i.hasClass("deensimc-slider")||i.hasClass("deensimc-toggle-label")){return}const c=n.attr("data-pro-url");if(c&&c!==""&&c!=="undefined"){window.open(c,"_blank")}else{}});e(".deensimc-widget-card.pro-locked").css({cursor:"pointer",transition:"all 0.3s ease"}).attr("title","Click to upgrade to PRO");e(".deensimc-widget-card.pro-locked").hover(function(){e(this).css("transform","translateY(-2px)")},function(){e(this).css("transform","translateY(0)")});e(".deensimc-widget-card.pro-locked .deensimc-widget-toggle").on("click",function(e){e.stopPropagation()});e("#enable-all").on("click",function(){e('.deensimc-widget-card input[type="checkbox"]').each(function(){if(!e(this).is(":disabled")){e(this).prop("checked",true).trigger("change")}});t("All available widgets are enabled now","success")});e("#disable-all").on("click",function(){e('.deensimc-widget-card input[type="checkbox"]').each(function(){if(!e(this).is(":disabled")){e(this).prop("checked",false).trigger("change")}});t("All available widgets are disabled now!","info")});e(".deensimc-switch input").on("change",function(){setTimeout(()=>{e("#submit").click();e(".deensimc-widget-card").css({opacity:"0.5","pointer-events":"none"})},100)});e(".deensimc-addons-settings form").on("submit",function(t){const n=e(this).find("#submit");n.prop("disabled",true).val("Saving...")});const n=new URLSearchParams(window.location.search);if(n.get("settings-updated")==="true"){t("Settings saved successfully!","success");const e=window.location.pathname+window.location.search.replace(/[?&]settings-updated=true/,"").replace(/^&/,"?");window.history.replaceState({},"",e||window.location.pathname)}const i=function(){const t=e(".deensimc-widget-card input:checked:not(:disabled)").length;const n=e(".deensimc-widget-card").length;if(e("#widget-count").length===0){const i=`\n <div id="widget-count" style="margin-top: 15px; color: #646970; font-size: 13px;">\n <strong>${t}</strong> of <strong>${n}</strong> available widgets enabled\n </div>\n `;e(".deensimc-description").after(i)}else{e("#widget-count").html(`<strong>${t}</strong> of <strong>${n}</strong> available widgets enabled`)}};i();e(".deensimc-widget-card input").on("change",i);e(document).on("keydown",function(t){if((t.ctrlKey||t.metaKey)&&t.which===83){t.preventDefault();e("form").submit()}});if(window.location.hash){const t=window.location.hash.substring(1);if(t==="widgets"||t==="general"){e('.deensimc-tab-btn[data-tab="'+t+'"]').click()}}e(".deensimc-tab-btn").on("click",function(){const t=e(this).data("tab");window.location.hash=t});let c=false;e("form input, form select, form textarea").on("change",function(){c=true});e("form").on("submit",function(){c=false});e(window).on("beforeunload",function(){if(c){return"You have unsaved changes. Are you sure you want to leave?"}})});e(".deensimc-enable-category").on("click",function(){const n=e(this).data("category");e(`.deensimc-widget-card[data-category="${n}"] input[type="checkbox"]`).each(function(){if(!e(this).is(":disabled")){e(this).prop("checked",true).trigger("change")}});t(`All ${n} items enabled successfully!`,"success")});e(".deensimc-disable-category").on("click",function(){const n=e(this).data("category");e(`.deensimc-widget-card[data-category="${n}"] input[type="checkbox"]`).each(function(){if(!e(this).is(":disabled")){e(this).prop("checked",false).trigger("change")}});t(`All ${n} items disabled successfully!`,"info")})})(jQuery); -
marquee-addons-for-elementor/trunk/assets/js/handle-animation-duration.min.js
r3413371 r3447763 1 (function( e,n){"use strict";function t(n){const t=n.find(".deensimc-marquee-main-container");const i=n.find(".deensimc-marquee-track");const a=t.data("is-marquee-on")??true;const c=t.data("marquee-speed");const s=!window.matchMedia("(max-width: 767px)").matches&&i.closest(".deensimc-marquee-vertical").length>0;if(a&&i.length){let n=0;i.each((e,t)=>{n+=s?t.scrollHeight:t.scrollWidth});const t=10;const a=c*t;const o=n/a;i.each((n,t)=>{e(t).css("animation-duration",`${o}s`)})}}window.handleAnimationDuration=t})(jQuery,window._);1 (function(n,e){"use strict";function t(e){const t=e.find(".deensimc-marquee-main-container");const c=e.find(".deensimc-marquee-track");const i=t.data("is-marquee-on")??true;const s=t.data("marquee-speed");const a=c.closest(".deensimc-marquee-vertical").length>0;if(i&&c.length){let e=0;c.each((n,t)=>{e+=a?t.scrollHeight:t.scrollWidth});const t=10;const i=s*t;const o=e/i;c.each((e,t)=>{n(t).css("animation-duration",`${o}s`)})}}window.handleAnimationDuration=t})(jQuery,window._); -
marquee-addons-for-elementor/trunk/base.php
r3446507 r3447763 6 6 { 7 7 private static $_instance = null; 8 const VERSION = '3.9.1 4';8 const VERSION = '3.9.15'; 9 9 10 10 public function __construct() -
marquee-addons-for-elementor/trunk/includes/widget.php
r3446507 r3447763 9 9 use Deensimcpro_Promo; 10 10 11 const VERSION = '3.9.1 4';11 const VERSION = '3.9.15'; 12 12 const MINIMUM_ELEMENTOR_VERSION = '3.5.0'; 13 13 const MINIMUM_PHP_VERSION = '7.4'; … … 217 217 echo ' </div>'; 218 218 echo ' <div class="deensimc-notice-content">'; 219 echo ' <h3>Upgrade to Marquee Addons Pro</h3>'; 220 echo ' <p>Unlock more advance widgets and make your Elementor website 10x better with Marquee Addons.</p>'; 221 echo ' <a href="https://marqueeaddons.com/pricing/" target="_blank" class="button button-primary">Upgrade to Pro</a>'; 219 echo ' <h3>Enjoying Marquee Addons?</h3>'; 220 echo ' <p>A quick rating helps other Elementor users discover Marquee Addons. You can also share feature ideas or suggestions to help us improve.</p>'; 221 echo ' <div class="deensimc-btns">'; 222 echo ' <div class="deensimc-action-btns">'; 222 223 echo ' <a href="https://wordpress.org/support/plugin/marquee-addons-for-elementor/reviews/#new-post" target="_blank" class="button button-primary">Rate Us</a>'; 223 echo ' <button class="button deensimc-dismiss-btn">Remind me later</button>'; 224 echo ' <button class="button deensimc-never-show">Don\'t show me again</button>'; 224 echo ' <a href="https://wordpress.org/support/plugin/marquee-addons-for-elementor/" target="_blank" class="button"> Feature Request</a>'; 225 echo ' <a href="https://marqueeaddons.com/pricing/" target="_blank" class="button">Upgrade to Pro</a>'; 226 echo ' </div>'; 227 echo ' <div class="deensimc-dismiss-btns">'; 228 echo ' <button class="button deensimc-dismiss-btn button-tertiary">Remind me later</button>'; 229 echo ' <button class="button deensimc-never-show button-tertiary">Don\'t show me again</button>'; 230 echo ' </div>'; 231 echo ' </div>'; 225 232 echo ' </div>'; 226 233 echo '</div>'; … … 429 436 ] 430 437 ); 431 438 432 439 // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound 433 440 if (!class_exists('\Deensimcpro_Marquee\Marqueepro') || !apply_filters('marquee_addons_is_license_active', false)) { -
marquee-addons-for-elementor/trunk/includes/widgets/class-deensimc-text-marquee.php
r3436552 r3447763 19 19 use Deensimc_Promotional_Banner; 20 20 use Deensimc_Textmarquee_Content_Text_Repeater; 21 use Deensimc_Textmarquee_Layout_Controls; 21 22 use Deensimc_Marquee_Controls; 22 23 use Deensimc_Textmarquee_Style_Text_Contents; … … 68 69 $this->content_text_repeater(); 69 70 $this->register_marquee_control('deensimc_text_marquee_options'); 70 71 71 $this->style_text_contents(); 72 $this->register_layout_controls(); 72 73 $this->register_style_edge_shadow('deensimc_text_marquee_edge_shadow'); 73 74 } … … 134 135 $settings = $this->get_settings_for_display(); 135 136 $texts = $settings['deensimc_repeater_text_main']; 136 $tag = self::validate_html_tag( $settings['deensimc_text_marquee_tag']);137 $tag = self::validate_html_tag($settings['deensimc_text_marquee_tag']); 137 138 138 139 $is_vertical = $settings['deensimc_marquee_vertical_orientation'] === 'yes'; … … 177 178 <div class="deensimc-marquee-track-wrapper"> 178 179 <div class="deensimc-marquee-track"> 179 <?php $this->render_marquee_texts($texts, $is_vertical, $tag, 'track-1') ?>180 <?php $this->render_marquee_texts($texts, $is_vertical, $tag, 'track-1') ?> 180 181 </div> 181 182 <div aria-hidden="true" class="deensimc-marquee-track"> -
marquee-addons-for-elementor/trunk/includes/widgets/traits/text-marquee/style-text-contents.php
r3420892 r3447763 81 81 82 82 $this->end_controls_tabs(); 83 84 $this->add_responsive_control(85 'deensimc_widget_height',86 [87 'label' => esc_html__('Section Height', 'marquee-addons-for-elementor'),88 'type' => Controls_Manager::SLIDER,89 'size_units' => ['vh'],90 'range' => [91 'vh' => [92 'min' => 1,93 'max' => 100,94 'step' => 1,95 ],96 ],97 98 'default' => [99 'unit' => 'vh',100 'size' => 60,101 ],102 'condition' => [103 'deensimc_marquee_vertical_orientation' => 'yes',104 ],105 'selectors' => [106 '{{WRAPPER}} .deensimc-marquee-vertical.deensimc-marquee-main-container' => 'height: {{SIZE}}vh;',107 ],108 ]109 );110 83 111 84 … … 213 186 ] 214 187 ); 215 216 $this->add_responsive_control(217 'deensimc_icon_adjust_vertical_position',218 [219 'label' => esc_html__('Adjust Vertical Position', 'marquee-addons-for-elementor'),220 'type' => Controls_Manager::SLIDER,221 'size_units' => ['px', 'em', 'rem'],222 'range' => [223 'px' => [224 'min' => -16,225 'max' => 16,226 'step' => 1,227 ],228 'em' => [229 'min' => -1,230 'max' => 1,231 'step' => 0.1,232 ],233 'rem' => [234 'min' => -1,235 'max' => 1,236 'step' => 0.1,237 ],238 ],239 'default' => [240 'unit' => 'px',241 'size' => 0,242 ],243 'selectors' => [244 '{{WRAPPER}} .deensimc-text-wrapper svg' => 'margin-block: {{SIZE}}{{UNIT}};',245 '{{WRAPPER}} .deensimc-text-wrapper i' => 'margin-block: {{SIZE}}{{UNIT}};',246 ],247 'condition' => [248 'deensimc_marquee_vertical_orientation' => 'yes',249 ],250 ]251 );252 188 // animation 253 189 $this->add_control( -
marquee-addons-for-elementor/trunk/marquee-addons-for-elementor.php
r3446507 r3447763 4 4 * Plugin Name: Marquee Addons for Elementor - Essential Motion Widgets & Templates 5 5 * Description: Marquee Addons an Elementor addon to create smooth, endless marquee carousels, showcases images, logos, or content with dynamic movement to engage visitors. It also allows you to create image accordions, stacked sliders, and text marquees. 6 * Version: 3.9.1 46 * Version: 3.9.15 7 7 * Requires at least: 5.8 8 8 * Requires PHP: 7.4 … … 26 26 define('DEENSIMC_PATH', plugin_dir_path(__FILE__)); 27 27 define('DEENSIMC_ASSETS_URL', DEENSIMC_URL . 'assets/'); 28 define('DEENSIMC_VERSION', '3.9.1 4');28 define('DEENSIMC_VERSION', '3.9.15'); 29 29 30 30 function deensimc_load_plugin_data(): void -
marquee-addons-for-elementor/trunk/readme.txt
r3446507 r3447763 4 4 Requires at least: 5.8 5 5 Tested up to: 6.9 6 Stable tag: 3.9.1 46 Stable tag: 3.9.15 7 7 Requires PHP: 7.4 8 8 License: GPLv2 or later … … 266 266 == Changelog == 267 267 268 = 3.9.15 - 2026-01-25 = 269 - Fix: Fixed an issue where animation speed increased on mobile. 270 - New: Separated the Section Height control for Vertical Text Marquee for improved structure. 271 - Fix: Removed the Icon Adjust Vertical Position control. 272 - New: Implemented widget enable/disable functionality on toggle change for better user control. 273 268 274 = 3.9.14 - 2026-01-25 = 269 275 - Fix: Render only valid images in the gallery in Image Marquee. 270 - Fix: Removed extra whitespace testimonial card in Testimonial marquee.276 - Fix: Removed extra whitespace from testimonial card in Testimonial marquee. 271 277 272 278 = 3.9.13 - 2026-01-24 =
Note: See TracChangeset
for help on using the changeset viewer.