8 isset(
$user) or require
$_SERVER[
'DOCUMENT_ROOT'] .
'/page/404.php';
9 $name = htmlspecialchars($_GET[
'name'], ENT_QUOTES);
12 <div
class=
"modal fade" id=
"<?= $basename ?>" tabindex=
"-1" data-backdrop=
"static" data-keyboard=
"false">
13 <div
class=
"modal-dialog modal-lg modal-dialog-centered" role=
"document">
14 <div
class=
"modal-content">
15 <div
class=
"modal-header">
16 <h5
class=
"modal-title"><i
class=
"fa fa-cubes"></i> Конструктор триггера действия</h5>
17 <button type=
"button" class=
"close" data-dismiss=
"modal" aria-label=
"Close">
18 <span aria-hidden=
"true">×</span>
21 <div
class=
"modal-body">
22 <form onsubmit=
"return false;">
23 <div
class=
"input-group input-group-sm">
24 <div
class=
"input-group-prepend w-50">
25 <span
class=
"input-group-text w-100">Тип тега</span>
27 <select name=
"tag" class=
"custom-select">
28 <option value=
"a"><a></option>
29 <option value=
"button"><button></option>
30 <option value=
"div"><div></option>
33 <div
class=
"input-group input-group-sm mt-2">
34 <div
class=
"input-group-prepend w-50">
35 <span
class=
"input-group-text w-100">Анкор</span>
37 <input type=
"text" name=
"anchor" class=
"form-control" value=
"Кнопка" placeholder=
"Анкор" autocomplete=
"off">
39 <div
class=
"input-group input-group-sm mt-2">
40 <div
class=
"input-group-prepend w-50">
41 <span
class=
"input-group-text w-100">Действие</span>
43 <input type=
"text" name=
"name" class=
"form-control" value=
"<?= $name ?>" placeholder=
"Имя действия" autocomplete=
"off" readonly>
45 <div
class=
"input-group input-group-sm mt-2">
46 <div
class=
"input-group-prepend w-50">
47 <span
class=
"input-group-text w-100">С подтверждением</span>
49 <select name=
"confirm" class=
"custom-select">
50 <option value=
"true">Да</option>
51 <option value=
"false">Нет (по умолчанию)</option>
54 <div
class=
"input-group input-group-sm mt-2">
55 <div
class=
"input-group-prepend w-50">
56 <span
class=
"input-group-text w-100">Заголовок подтверждения</span>
58 <input type=
"text" name=
"header" class=
"form-control" value=
"" placeholder=
"Подтвердите действие (по умолчанию)" autocomplete=
"off">
60 <div
class=
"input-group input-group-sm mt-2">
61 <div
class=
"input-group-prepend w-50">
62 <span
class=
"input-group-text w-100">Текст подтверждения</span>
64 <input type=
"text" name=
"body" class=
"form-control" value=
"" placeholder=
"Body содержимое модалки" autocomplete=
"off">
66 <div
class=
"input-group input-group-sm mt-2">
67 <div
class=
"input-group-prepend w-50">
68 <span
class=
"input-group-text w-100">Ajax dataType</span>
70 <select name=
"response" class=
"custom-select">
71 <option value=
"json">json (по умолчанию)</option>
72 <option value=
"html">html</option>
73 <option value=
"script">script</option>
74 <option value=
"xml">xml</option>
77 <div
class=
"input-group input-group-sm mt-2">
78 <div
class=
"input-group-prepend w-50">
79 <span
class=
"input-group-text w-100">Callback функция</span>
81 <input type=
"text" name=
"callback" class=
"form-control" value=
"" placeholder=
"" autocomplete=
"off">
83 <ul
class=
"rounded bg-light-info border small mt-2 p-2 pl-4 mb-0">
84 <li>Можно добавить любые data-* аттрибуты, они все будут переданы в
$_POST[*] переменных на скрипт обработчик</li>
85 <li>Если задана callback функция - она будет вызвана с аргументом response(ответ обработчика)</li>
87 <div
class=
"position-relative">
88 <textarea name=
"result-button" class=
"mt-2 form-control p-1" rows=
"1" style=
"font-size:14px;"></textarea>
89 <a style=
"position:absolute;top:0;right:4px;" title=
"Копировать код" href=
"#"><i
class=
"fa fa-copy" aria-hidden=
"true"></i></a>
91 <div
class=
"position-relative" style=
"display:none;">
92 <textarea name=
"result-function" class=
"mt-2 form-control p-1" rows=
"7" style=
"font-size:14px;"></textarea>
93 <a style=
"position:absolute;top:0;right:4px;" title=
"Копировать код" href=
"#"><i
class=
"fa fa-copy" aria-hidden=
"true"></i></a>
102 function construct() {
103 let action = $(
'#<?= $basename ?> [name=name]').val().trim();
104 let code = $(
'<a class="btn btn-primary" data-action="' + action +
'"></a>');
105 let anchor = $(
'#<?= $basename ?> [name=anchor]').val().trim();
107 if ($(
'#<?= $basename ?> [name=confirm]').val() ==
'true') {
108 code.attr(
'data-confirm',
'true');
109 $(
'#<?= $basename ?> [name=header]').parent().slideDown();
110 $(
'#<?= $basename ?> [name=body]').parent().slideDown();
111 let header = $(
'#<?= $basename ?> [name=header]').val().trim();
112 let body = $(
'#<?= $basename ?> [name=body]').val().trim();
114 code.attr(
'data-header', header);
117 code.attr(
'data-body', body);
120 $(
'#<?= $basename ?> [name=header]').parent().slideUp();
121 $(
'#<?= $basename ?> [name=body]').parent().slideUp();
123 let response = $(
'#<?= $basename ?> [name=response]').val().trim();
124 if (response !=
'json') {
125 code.attr(
'data-response', response);
127 let callback = $(
'#<?= $basename ?> [name=callback]').val().trim();
128 $(
'#<?= $basename ?> [name=result-function]').val(
'');
130 code.attr(
'data-callback', callback);
131 $(
'#<?= $basename ?> [name=result-function]').val(
'function ' + callback +
'(response) {\n if (response.error) {\n errorToast(response.error);\n return;\n }\n successToast(response.message);\n}');
132 $(
'#<?= $basename ?> [name=result-function]').parent().slideDown();
134 $(
'#<?= $basename ?> [name=result-function]').parent().slideUp();
137 code = code[0].outerHTML;
138 let tag = $(
'#<?= $basename ?> [name=tag]').val();
139 code = code.replace(/^<[a-z]+/,
'<' + tag);
140 code = code.replace(/[a-z]+>$/, tag +
'>');
142 $(
'#<?= $basename ?> [name=result-button]').val(code);
143 $(
'#<?= $basename ?> [name=result-button]').css({
146 $(
'#<?= $basename ?> [name=result-button]').css({
147 'height': ($(
'#<?= $basename ?> [name=result-button]')[0].scrollHeight + 3) +
'px'
152 $(
'#<?= $basename ?> form').on(
'input keyup', construct);
154 $(
'#<?= $basename ?> form').trigger(
'keyup');
157 $(
'#<?= $basename ?> textarea').next().click(
function(e) {
159 $(
this).prev().focus();
160 $(
this).prev().select();
161 document.execCommand(
'copy',
false);
162 successToast(
'Скопировано в буфер');
164 window.getSelection().removeAllRanges();
setcookie('FROM_UID', $uid, [ 'expires'=> time()+31536000, 'path'=> '/', 'domain'=> $_SERVER['HTTP_HOST'], 'secure'=> Wrong\Start\Env::$e->IS_SECURE, 'httponly'=> false, 'samesite'=> Wrong\Start\Env::$e->IS_SECURE ? 'None' :'Lax']) or setcookie('FROM_UID' $_SERVER['HTTP_HOST']