PluginProbe
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder / 51.1.76
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder v51.1.76
51.1.83 51.1.82 51.1.81 51.1.79 51.1.78 51.1.77 51.1.76 51.1.74 51.1.75 51.1.65 51.1.64 51.1.63 trunk 51.1.14 51.1.2 51.1.35 51.1.36 51.1.37 51.1.38 51.1.39 51.1.44 51.1.45 51.1.46 51.1.47 51.1.49 All 37 releases
king-addons / includes / extensions / Smart_Links / assets / admin.js

admin.js in King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder 51.1.76, at includes/extensions/Smart_Links/assets/admin.js

200 lines 6.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function($) {
2 'use strict';
3
4 function updateShortPreview() {
5 var $preview = $('#kng-short-preview');
6 if (!$preview.length || !window.KNGSmartLinks) {
7 return;
8 }
9
10 var basePath = (KNGSmartLinks.basePath || 'go').replace(/^\/+|\/+$/g, '');
11 var slug = $('#kng-slug-input').val() || '';
12 slug = slug.trim();
13 var displaySlug = slug !== '' ? slug : 'your-slug';
14 var shortUrl = KNGSmartLinks.homeUrl + basePath + '/' + displaySlug;
15
16 $preview.text(shortUrl);
17 $preview.attr('data-copy', shortUrl);
18 $('#kng-copy-short').attr('data-copy', shortUrl);
19 }
20
21 function updateUtmPreview() {
22 var $preview = $('#kng-utm-preview');
23 if (!$preview.length) {
24 return;
25 }
26
27 var destination = $('#kng-destination').val() || '';
28 destination = destination.trim();
29 if (destination === '') {
30 $preview.text('');
31 return;
32 }
33
34 var url;
35 try {
36 url = new URL(destination);
37 } catch (e) {
38 $preview.text(destination);
39 return;
40 }
41
42 if ($('#kng-utm-enabled').is(':checked')) {
43 var fields = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'];
44 fields.forEach(function(key) {
45 var value = $('#kng-' + key).val();
46 if (value) {
47 url.searchParams.set(key, value);
48 }
49 });
50 }
51
52 $preview.text(url.toString());
53 }
54
55 function toggleSlugMode() {
56 var mode = $('input[name="slug_mode"]:checked').val();
57 if (mode === 'manual') {
58 $('.kng-slug-manual').show();
59 } else {
60 $('.kng-slug-manual').hide();
61 }
62 updateShortPreview();
63 }
64
65 $(document).ready(function() {
66 // Theme toggle
67 var $segment = $('#ka-v3-theme-segment');
68 var $buttons = $segment.find('.ka-v3-segmented-btn');
69 var mql = window.matchMedia ? window.matchMedia('(prefers-color-scheme: dark)') : null;
70 var mode = ($segment.attr('data-active') || 'dark').toString();
71 var mqlHandler = null;
72
73 function saveUISetting(value) {
74 if (!window.KNGSmartLinks) {
75 return;
76 }
77 $.post(KNGSmartLinks.ajaxUrl, {
78 action: 'king_addons_save_dashboard_ui',
79 nonce: KNGSmartLinks.themeNonce,
80 key: 'theme_mode',
81 value: value
82 });
83 }
84
85 function updateSegment(activeMode) {
86 $segment.attr('data-active', activeMode);
87 $buttons.each(function() {
88 var theme = ($(this).data('theme') || 'dark').toString();
89 $(this).attr('aria-pressed', theme === activeMode ? 'true' : 'false');
90 });
91 }
92
93 function applyTheme(isDark) {
94 $('body').toggleClass('ka-v3-dark', isDark);
95 document.documentElement.classList.toggle('ka-v3-dark', isDark);
96 }
97
98 function setThemeMode(nextMode, save) {
99 mode = (nextMode || 'dark').toString();
100 updateSegment(mode);
101
102 if (mqlHandler && mql) {
103 if (mql.removeEventListener) {
104 mql.removeEventListener('change', mqlHandler);
105 } else if (mql.removeListener) {
106 mql.removeListener(mqlHandler);
107 }
108 mqlHandler = null;
109 }
110
111 if (mode === 'auto') {
112 applyTheme(!!(mql && mql.matches));
113 mqlHandler = function(e) {
114 if (mode !== 'auto') {
115 return;
116 }
117 applyTheme(!!e.matches);
118 };
119 if (mql) {
120 if (mql.addEventListener) {
121 mql.addEventListener('change', mqlHandler);
122 } else if (mql.addListener) {
123 mql.addListener(mqlHandler);
124 }
125 }
126 } else {
127 applyTheme(mode === 'dark');
128 }
129
130 if (save) {
131 saveUISetting(mode);
132 }
133 }
134
135 $segment.on('click', '.ka-v3-segmented-btn', function(e) {
136 e.preventDefault();
137 setThemeMode(($(this).data('theme') || 'dark').toString(), true);
138 });
139
140 window.kaV3ToggleDark = function() {
141 var isDark = $('body').hasClass('ka-v3-dark');
142 setThemeMode(isDark ? 'light' : 'dark', true);
143 };
144
145 setThemeMode(mode, false);
146
147 // Copy buttons
148 $(document).on('click', '.ka-copy-btn, #kng-short-preview', function(e) {
149 var text = $(this).data('copy') || $(this).attr('data-copy') || $(this).text();
150 if (!text) {
151 return;
152 }
153
154 if (navigator.clipboard && navigator.clipboard.writeText) {
155 navigator.clipboard.writeText(text);
156 } else {
157 var $temp = $('<input>');
158 $('body').append($temp);
159 $temp.val(text).select();
160 document.execCommand('copy');
161 $temp.remove();
162 }
163
164 var $btn = $(this).hasClass('ka-copy-btn') ? $(this) : null;
165 if ($btn && $btn.length) {
166 $btn.addClass('is-copied');
167 $btn.find('span').last().text('Copied');
168 setTimeout(function() {
169 $btn.removeClass('is-copied');
170 $btn.find('span').last().text('Copy');
171 }, 1200);
172 }
173 });
174
175 // Short URL preview
176 $(document).on('input', '#kng-slug-input', updateShortPreview);
177 $(document).on('change', 'input[name="slug_mode"]', toggleSlugMode);
178 toggleSlugMode();
179
180 // UTM preview
181 $(document).on('input change', '#kng-destination, #kng-utm-enabled, #kng-utm_source, #kng-utm_medium, #kng-utm_campaign, #kng-utm_term, #kng-utm_content', updateUtmPreview);
182 updateUtmPreview();
183
184 // Select all in lists
185 $('#kng-select-all').on('change', function() {
186 var checked = $(this).is(':checked');
187 $('.kng-link-checkbox').prop('checked', checked);
188 });
189
190 // Settings tab navigation
191 $('.kng-settings-tab').on('click', function() {
192 var target = $(this).data('tab');
193 $('.kng-settings-tab').removeClass('active');
194 $(this).addClass('active');
195 $('.kng-settings-content').removeClass('active');
196 $('.kng-settings-content[data-tab=\"' + target + '\"]').addClass('active');
197 });
198 });
199 })(jQuery);
200