annotate .cms/js/admin.js @ 1:1d486627aa1e draft default tip

24.10
author Coffee CMS <info@coffee-cms.ru>
date Sat, 12 Oct 2024 02:51:39 +0000
parents 78edf6b517a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1 // Две функции для чтения и установки cookie.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
2 // Cookie используются для авторизации на сайте,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
3 // для запоминания количества отображаемых страниц в пейджере
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
4 // и выбранной темы.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
5 // Другие модули так же могут их использовать
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
6 // для запоминания своих настроек.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
7 function get_cookie( name ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
8 let cookies = document.cookie.split( ";" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 for ( let line of cookies ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10 let cookie = line.split( "=" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 // TODO: Нужно ли decodeURIComponent( cookie[ 0 ].trim() )?
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12 // Имена указываются обычно латиницей, без специальных знаков...
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13 if ( name == cookie[ 0 ].trim() ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14 return decodeURIComponent( cookie[ 1 ] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17 return "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20 // ;Path=/ в админке нет смысла указывать, но можно экономить байты куков
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 // браузер сам по умолчанию возьмет текущий путь
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 function set_cookie( name, value ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 document.cookie = encodeURIComponent( name ) + "=" + encodeURIComponent( value ) + ";SameSite=Lax";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 function set_cookie_expires( name, value ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27 let expires = ( new Date( Date.now() + 365 * 86400 * 1000 ) ).toUTCString();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28 document.cookie = encodeURIComponent( name ) + "=" + encodeURIComponent( value ) + ";SameSite=Lax;expires=" + expires;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 // Чтобы удалить куки нужно установить отрицательную дату истечения срока действия
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32 function del_cookie( name ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33 document.cookie = encodeURIComponent( name ) + "=;SameSite=Lax;max-age=-1";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36 // Notifications
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 // Уведомления, отображающиеся в правом верхнем. Обычно в течении 5 сек.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 // Через 5 секунд к уведомлению добавляется класс timeout,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40 // благодаря ему происходит исчезновение уведомления.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 function notify( message, classes, msec ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 let bulb = document.createElement( "div" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 bulb.innerHTML = message;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 bulb.className = classes;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 document.querySelector( ".log-info-box" ).appendChild( bulb );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 let h = bulb.offsetHeight;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 // Чтобы анимировать схлопывание
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 bulb.setAttribute( "style", `height:${h}px` );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 if ( msec ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 setTimeout( function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51 bulb.classList.add( "timeout" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52 }, msec);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 // Translate
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57 // module: "admin.mod.php" or "pages.mod.php" etc
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 // Шаблон admin добавляет глобальную js-переменную
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 // в которой содержится текущая локаль и переводы,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61 // загруженные из файлов .cms/lang/...
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62 // Поэтому ими можно пользоваться и на стороне админки.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63 function __( str, module ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 if ( cms && cms.locale && cms.lang && cms.lang[module] && cms.lang[module][cms.locale] && cms.lang[module][cms.locale][str] ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65 return cms.lang[module][cms.locale][str];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67 api( { fn: "no_translation", str: str, module: module } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68 return str;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
70 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
71
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
72 // Call server side API
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
73
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
74 // Передаваемые на сервер данные упаковываются как положено
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
75 // и можно передавать даже массивы.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
76 // Массивы вложенные в массивы воспринимаются как объекты
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
77 // и кодируются в JSON.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
78 // После того, как сервер вернет ответ, вызывается функция rfn
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
79 // И ответ передается ей в качестве параметра.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
80 function api( data, rfn, efn ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
81 const formData = new FormData();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
82 buildFormData( formData, data );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
83 // send data
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
84 // По умолчанию запросы отправляются асинхронно,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
85 // но если нужно дождаться ответа и затем изменить полученные данные,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
86 // то перед вызовом обновляющих функций нужно дописать строчку
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
87 // cms.async_api = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
88 let ajax = new XMLHttpRequest();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
89 ajax.addEventListener( "load", function( event ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
90 let data = {};
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
91 try {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
92 data = JSON.parse( event.target.responseText );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
93 } catch {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
94 notify( __( "server_error", "admin.mod.php" ), "info-error", 5000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
95 if ( efn ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
96 efn( event );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
97 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
98 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
99 if ( rfn ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
100 rfn( data );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
101 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
102 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
103 ajax.addEventListener( "error", function( event ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
104 notify( __( "network_error", "admin.mod.php" ), "info-error", 5000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
105 if ( efn ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
106 efn( event );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
107 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
108 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
109 ajax.open( "POST", cms.api, cms.async_api );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
110 ajax.send( formData );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
111 cms.async_api = true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
112 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
113 function buildFormData( formData, data, parentKey ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
114 if ( data && typeof data === 'object' && ! ( data instanceof Date ) && ! ( data instanceof File ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
115 Object.keys( data ).forEach( key => {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
116 buildFormData( formData, data[key], parentKey ? `${parentKey}[${key}]` : key );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
117 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
118 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
119 const value = data == null ? '' : data;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
120 formData.append( parentKey, value );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
121 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
122 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
123
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
124
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
125 // Create and connect Codemirror
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
126 function codemirror_connect( selector, name, options = {} ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
127
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
128 if ( window[name] ) return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
129
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
130 let default_options = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
131 mode: "application/x-httpd-php",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
132 styleActiveLine: true,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
133 lineNumbers: true,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
134 lineWrapping: true,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
135 autoCloseBrackets: true,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
136 smartIndent: true,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
137 indentUnit: 4,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
138 tabSize: 4,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
139 matchBrackets: true,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
140 foldGutter: true,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
141 gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"],
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
142 autoCloseTags: {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
143 whenClosing: true,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
144 whenOpening: true,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
145 indentTags: [ "div", "ul", "ol", "script", "style" ],
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
146 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
147 phrases: {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
148 "Search:": __( "codemirror_search", "admin.mod.php" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
149 "(Use /re/ syntax for regexp search)" : __( "codemirror_re", "admin.mod.php" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
150 "Replace all:": __( "codemirror_replace_all", "admin.mod.php" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
151 "With:": __( "codemirror_replace_with", "admin.mod.php" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
152 "Replace:": __( "codemirror_replace_replace", "admin.mod.php" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
153 "Replace?": __( "codemirror_replace_confirm", "admin.mod.php" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
154 "Yes": __( "codemirror_yes", "admin.mod.php" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
155 "No": __( "codemirror_no", "admin.mod.php" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
156 "All": __( "codemirror_all", "admin.mod.php" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
157 "Stop": __( "codemirror_stop", "admin.mod.php" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
158 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
159 extraKeys: { "Ctrl-Space": "autocomplete" }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
160 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
161
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
162 let txtarea = document.querySelector( selector );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
163 options = Object.assign( default_options, options );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
164 window[name] = CodeMirror.fromTextArea( txtarea, options );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
165
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
166 if ( window[name].showHint ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
167 window[name].on( "keydown", function( editor, event ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
168 if ( event.ctrlKey == true ) { return } // Ctrl+S call Hint
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
169 let isAlphaKey = /^[a-zA-Z]$/.test( event.key );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
170 if ( window[name].state.completionActive && isAlphaKey ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
171 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
172 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
173
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
174 // Prevent autocompletion in string literals or comments
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
175 let cursor = window[name].getCursor();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
176 let token = window[name].getTokenAt( cursor );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
177 if ( token.type === "string" || token.type === "comment" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
178 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
179 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
180
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
181 let lineBeforeCursor = window[name].doc.getLine( cursor.line );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
182 if ( typeof lineBeforeCursor !== "string" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
183 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
184 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
185 lineBeforeCursor = lineBeforeCursor.substring( 0, cursor.ch );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
186
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
187 // disable autoclose tag before text
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
188 let charAfterCursor = window[name].doc.getLine( cursor.line );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
189 charAfterCursor = charAfterCursor.substring( cursor.ch, cursor.ch + 1 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
190 window[name].options.autoCloseTags.dontCloseTags = null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
191 if ( charAfterCursor.match( /\S/ ) && charAfterCursor != "<" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
192 if ( lineBeforeCursor.match( /<[^>]+$/ ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
193 let tag = lineBeforeCursor.match( /<(\w+)\b[^>]*$/ );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
194 if ( tag ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
195 tag = tag[1];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
196 window[name].options.autoCloseTags.dontCloseTags = [tag];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
197 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
198 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
199 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
200
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
201 let m = CodeMirror.innerMode( window[name].getMode(), token.state );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
202 let innerMode = m.mode.name;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
203 let shouldAutocomplete;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
204 if ( innerMode === "html" || innerMode === "xml" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
205 shouldAutocomplete = event.key === "<" ||
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
206 event.key === "/" && token.type === "tag" ||
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
207 isAlphaKey && token.type === "tag" ||
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
208 isAlphaKey && token.type === "attribute" ||
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
209 token.string === "=" && token.state.htmlState && token.state.htmlState.tagName;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
210 } else if ( innerMode === "css" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
211 shouldAutocomplete = isAlphaKey ||
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
212 event.key === ":" ||
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
213 event.key === " " && /:\s+$/.test( lineBeforeCursor );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
214 } else if ( innerMode === "javascript" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
215 shouldAutocomplete = isAlphaKey || event.key === ".";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
216 } else if ( innerMode === "clike" && window[name].options.mode === "php" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
217 shouldAutocomplete = token.type === "keyword" || token.type === "variable";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
218 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
219 if ( shouldAutocomplete ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
220 window[name].showHint( { completeSingle: false } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
221 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
222 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
223 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
224
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
225 // Replace < with &lt; in code context
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
226 // https://stackoverflow.com/a/36388061/20443861
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
227 window[name].on( "inputRead", function( cm, event ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
228 if ( event.origin == "paste" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
229 if ( cm.paste_context == "code" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
230 let text = event.text.join( "\n" ); // pasted string
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
231 let new_text = text.replaceAll( /</g, "&lt;" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
232 new_text = new_text.replaceAll( /&&/g, "&amp;&amp;" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
233 cm.execCommand( "undo" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
234 cm.replaceSelection( new_text );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
235 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
236 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
237 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
238 window[name].on( "paste", async function( editor, event ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
239 let cursor = window[name].getCursor();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
240 let token = window[name].getTokenAt( cursor );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
241 if ( token && token.state && token.state.html && token.state.html.htmlState && token.state.html.htmlState.context && token.state.html.htmlState.context.tagName == "code" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
242 window[name].paste_context = "code";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
243 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
244 window[name].paste_context = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
245 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
246 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
247
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
248 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
249
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
250
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
251 document.addEventListener( "DOMContentLoaded", function( event ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
252
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
253 function _( str ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
254 return __( str, "admin.mod.php" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
255 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
256
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
257 // Mob Menu
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
258 document.querySelectorAll( "header .burger, .milk" ).forEach( function( el ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
259 el.onclick = function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
260 document.body.classList.toggle( "mobile-menu-open" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
261 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
262 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
263
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
264 // Навигация стрелками браузера - фикс активного пункта
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
265 window.addEventListener( "popstate", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
266 // Очищаем без всяких проверок чтобы не подсвечивало на #start
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
267 document.querySelectorAll( "aside a" ).forEach( function( page ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
268 page.classList.remove( "active" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
269 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
270 // Выделяем нужную ссылку
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
271 let target = window.location.hash;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
272 let a = document.querySelector( `aside a[href="${target}"]` );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
273 if ( a ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
274 a.classList.add( "active" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
275 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
276 // надо ли непонятно, скопировал из предыдущего обработчика кликов на всякий случай
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
277 document.body.classList.remove( "mobile-menu-open" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
278 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
279
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
280 // Theme switcher
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
281 document.querySelectorAll( ".theme-switcher" ).forEach( function( el ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
282 el.addEventListener( "click", function( event ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
283 event.preventDefault();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
284 let n = get_cookie( "theme" ) || 0;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
285 let styles2 = admin_styles[n];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
286 let styles = styles2.split( " " );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
287 styles.forEach( function( style ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
288 document.documentElement.classList.remove( style );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
289 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
290 n = (+n+1) % admin_styles.length;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
291 styles2 = admin_styles[n];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
292 styles = styles2.split( " " );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
293 styles.forEach( function( style ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
294 document.documentElement.classList.add( style );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
295 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
296 notify( admin_styles[n], "info-success", 5000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
297 set_cookie( "theme" , n );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
298 theme_event = new Event( "theme" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
299 document.dispatchEvent( theme_event );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
300 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
301 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
302
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
303 // Logout
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
304 document.querySelectorAll( "[data-logout]" ).forEach( function ( logoutBtn ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
305 logoutBtn.addEventListener( "click", function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
306 // Отправляем на бекенд чтобы закрыло сессию
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
307 api( { fn: "logout" },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
308 // Перезагрузка страницы в случае если админка ответила
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
309 function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
310 window.location.reload( true );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
311 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
312 // Даже если нет связи, удаляем куки и перезагружаем страницу
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
313 function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
314 del_cookie( "sess" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
315 window.location.reload( true );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
316 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
317 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
318 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
319 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
320
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
321 // Highlight active menu
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
322 if ( document.body.classList.contains( "logged" ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
323 let page = window.location.hash;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
324 // Зачем тут исключение #start?
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
325 if ( page && page != "#start" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
326 let el = document.querySelector( `a[href="${page}"]` );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
327 if ( el ) el.classList.add( "active" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
328 } else if ( document.querySelector( "#start a[href='#base']" ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
329 // Приветственная страничка с указанием подключиться к БД
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
330 window.location.hash = "#start";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
331 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
332 // Если никакой пункт не выбран, выбираем по умолчанию Страницы
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
333 window.location.hash = "#pages";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
334 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
335 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
336
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
337 // Clear Cache
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
338 document.querySelectorAll( ".clear-cache" ).forEach( function( el ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
339 el.addEventListener( "click", function( e ){
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
340 e.preventDefault();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
341 api( { fn: "clear_cache" }, function( r ){
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
342 if ( r.info_text ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
343 notify( r.info_text, r.info_class, r.info_time );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
344 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
345 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
346 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
347 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
348
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
349
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
350 // Admin section, Save properties
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
351 document.querySelectorAll( "[data-am-save]" ).forEach( function( saveButton ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
352 saveButton.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
353 let el = this.closest( "[data-am-item]" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
354 let item = el.getAttribute( "data-am-item" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
355 let selector = `#admin_menu [data-am-item="${item}"]`;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
356 let title = document.querySelector( `${selector} [name=title]` );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
357 if ( title ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
358 title = title.value;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
359 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
360 let section = document.querySelector( `${selector} .section-select-grid .field-select` );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
361 if ( section ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
362 section = section.getAttribute( "data-section" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
363 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
364 let data = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
365 fn: "admin_menu_save",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
366 type: el.getAttribute( "data-am-type" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
367 module: el.getAttribute( "data-am-module" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
368 item: item,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
369 title: title,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
370 sort: document.querySelector( `${selector} [name=sort]` ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
371 section: section,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
372 reset: this.hasAttribute( "data-am-reset" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
373 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
374 api( data, function( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
375 if ( r.ok == "true" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
376 window.location.reload( true );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
377 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
378 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
379 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
380 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
381
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
382 // Admin section, Delete Container
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
383 document.querySelectorAll( "[data-am-delete]" ).forEach( function( button ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
384 button.addEventListener( "click", function( e ){
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
385 let item = this.closest( "[data-am-item]" ).getAttribute( "data-am-item" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
386 let childs = document.querySelectorAll( `[data-am-childs="${item}"] > div` ).length;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
387 if ( childs ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
388 notify( _( "not_empty_section" ), "info-error", 2000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
389 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
390 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
391 if ( ! confirm( _( "confirm_delete" ) ) ) return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
392 let data = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
393 fn: "admin_menu_del",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
394 item: item,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
395 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
396 api( data, function( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
397 if ( r.info_text ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
398 notify( r.info_text, r.info_class, r.info_time );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
399 if ( r.info_time ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
400 setTimeout( function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
401 window.location.reload( true );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
402 }, r.info_time );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
403 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
404 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
405 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
406 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
407 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
408
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
409 // Admin section, Hide
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
410 document.querySelectorAll( "[data-am-sw]" ).forEach( function( button ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
411 button.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
412 let el = this.closest( "[data-am-item]" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
413 let data = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
414 fn: "admin_menu_hide",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
415 type: el.getAttribute( "data-am-type" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
416 module: el.getAttribute( "data-am-module" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
417 item: el.getAttribute( "data-am-item" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
418 hide: el.classList.contains( "showed" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
419 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
420 if ( data.item == "admin_menu" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
421 if ( ! confirm( _( "hide_admin_settings" ) ) ) return false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
422 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
423 api( data, function( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
424 if ( r.ok == "true" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
425 window.location.reload( true );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
426 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
427 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
428 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
429 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
430
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
431 // Admin section, Add Section
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
432 document.querySelectorAll( "#admin_menu .main-footer .add-section" ).forEach( function( button ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
433 button.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
434 api( { fn: "admin_menu_add_section" }, function( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
435 if ( r.info_text ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
436 notify( r.info_text, r.info_class, r.info_time );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
437 if ( r.info_time )
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
438 setTimeout( function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
439 window.location.reload( true );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
440 }, r.info_time );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
441 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
442 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
443 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
444 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
445
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
446
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
447 // Reset all items in Admin Menu
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
448 document.querySelectorAll( "#admin_menu .main-footer .reset-all" ).forEach( function( button ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
449 button.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
450 api( { fn: "reset_admin_menu_items" }, function( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
451 if ( r.info_text ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
452 notify( r.info_text, r.info_class, r.info_time );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
453 if ( r.info_time )
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
454 setTimeout( function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
455 window.location.reload( true );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
456 }, r.info_time );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
457 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
458 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
459 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
460 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
461
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
462
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
463 // Disable Modules
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
464 document.querySelectorAll( "#modules .module-sw-btn" ).forEach( function( button ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
465 button.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
466 let closest = this.closest( "[data-module]" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
467 let data = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
468 fn: "module_disable",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
469 disable: closest.classList.contains( "enabled" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
470 module: closest.getAttribute( "data-module" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
471 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
472 api( data, function( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
473 if ( r.info_text ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
474 notify( r.info_text, r.info_class, r.info_time );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
475 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
476 window.location.reload( true );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
477 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
478 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
479 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
480 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
481
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
482 // Delete Module
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
483 document.querySelectorAll( "#modules .module-del-btn" ).forEach( function( button ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
484 button.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
485 let module = this.closest( "[data-module]" ).getAttribute( "data-module" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
486 let data = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
487 fn: "module_del",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
488 module: module,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
489 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
490 api( data, function( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
491 if ( r.info_text ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
492 notify( r.info_text, r.info_class, r.info_time );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
493 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
494 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
495 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
496 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
497
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
498 // Close Sessions
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
499 document.querySelectorAll( "#auth [data-login]" ).forEach( function( button ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
500 button.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
501 e.preventDefault();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
502 if ( ! confirm( _( "confirm_logout" ) ) ) return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
503 let parent = button.parentElement;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
504 var data = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
505 fn: "logout",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
506 sess: this.getAttribute( "data-login" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
507 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
508 api( data, function( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
509 if ( r.info_text ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
510 notify( r.info_text, r.info_class, r.info_time );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
511 if ( r.result == "refresh" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
512 // refresh приходит если мы закрываем свою сессию
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
513 window.location.reload( true );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
514 } else if ( r.result == "ok" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
515 // Перемещаем сессию в закрытые путем копирования html,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
516 // предварительно удалив класс del-sess чтобы не отображался крестик.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
517 // А старый элемент удаляем.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
518 // При копировании html так же удаляется привязанная функция.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
519 button.classList.remove( "del-sess" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
520 let html = parent.outerHTML;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
521 parent.remove();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
522 document.querySelector( ".history-sess .sess-table" ).insertAdjacentHTML( "afterbegin", html );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
523 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
524 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
525 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
526 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
527 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
528
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
529 // Show/Hide password
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
530 document.querySelectorAll( ".password-eye" ).forEach( function( eye ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
531 eye.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
532 this.classList.toggle( "showed" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
533 let inp = this.previousElementSibling;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
534 let t = inp.getAttribute( "type" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
535 if ( t == "password" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
536 inp.setAttribute( "type", "text" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
537 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
538 inp.setAttribute( "type", "password" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
539 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
540 inp.focus();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
541 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
542 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
543
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
544 // Install module (upload module)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
545 let input = document.querySelector( "#module-upload" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
546 if ( input ) input.addEventListener( "change", async function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
547 const formData = new FormData();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
548 formData.append( "fn", "install_module" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
549 for ( let i = 0; i < input.files.length; i++ ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
550 formData.append( "myfile[]", input.files[i] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
551 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
552 let ajax = new XMLHttpRequest();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
553 /*
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
554 ajax.upload.addEventListener( "progress", function( event ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
555 let percent = Math.round( (event.loaded / event.total) * 100 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
556 bar.style.width = percent + "%";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
557 }, false );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
558
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
559 ajax.addEventListener( "error", function( event ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
560 notify( _( "error_upload_file" ), "info-error", 3600000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
561 bar.style = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
562 }, false );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
563
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
564 ajax.addEventListener( "abort", function( event ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
565 notify( _( "error_upload_file" ), "info-error", 3600000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
566 bar.style = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
567 }, false );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
568 */
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
569 let google_chrome_fix = this;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
570 ajax.addEventListener( "load", function( event ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
571 google_chrome_fix.value = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
572 let r = JSON.parse( event.target.responseText );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
573 if ( r.info_text ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
574 notify( r.info_text, r.info_class, r.info_time );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
575 if ( r.info_class === "info-success" ) setTimeout( function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
576 window.location.reload( true );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
577 }, r.info_time );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
578 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
579 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
580 ajax.open( "POST", cms.api );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
581 ajax.send( formData );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
582 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
583
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
584 // БД. Открытие дополнительных настроек.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
585 document.querySelectorAll( "#base .pro-btn" ).forEach( function( pro ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
586 pro.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
587 document.querySelector( "#base form" ).classList.toggle( "show-pro" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
588 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
589 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
590
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
591 // Выбор секции Админского меню. Select
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
592 document.querySelectorAll( "#admin_menu .field-select" ).forEach( function( select ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
593 select.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
594 e.stopPropagation();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
595 this.parentElement.classList.toggle( "open" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
596
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
597 // это можно убрать если переставить стили на родителя
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
598 select.nextElementSibling.classList.toggle( "open" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
599 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
600 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
601
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
602 // Выбор секции Админского меню. Option
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
603 document.querySelectorAll( "#admin_menu .field-options .option" ).forEach( function( select ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
604 select.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
605 let input = this.closest( ".section-select-grid" ).querySelector( ".field-select" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
606 input.querySelector( ".value" ).innerText = this.innerText;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
607 input.setAttribute( "data-section", this.getAttribute( "value" ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
608 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
609 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
610 // Select
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
611 // Закрытие выпадающих списков при кликах вне их, а так же по ним
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
612 document.body.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
613 document.querySelectorAll( "#admin_menu .section-select-grid" ).forEach( function( list ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
614 list.classList.remove( "open" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
615 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
616
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
617 // это можно убрать если переставить стили на родителя
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
618 document.querySelectorAll( "#admin_menu .field-options" ).forEach( function( list ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
619 list.classList.remove( "open" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
620 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
621 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
622
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
623
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
624 /* Обновление и проверка файлов */
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
625
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
626 document.querySelectorAll( "#modules [data-fn]" ).forEach( function( button ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
627 button.addEventListener( "click", function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
628 let fn = this.getAttribute( "data-fn" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
629 let data = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
630 fn: fn
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
631 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
632 api( data, function( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
633 if ( r.answer ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
634 switch ( fn ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
635 case "cms_update":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
636 document.querySelector( "#modules .update-window" ).insertAdjacentHTML( "beforeend", r.answer );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
637 break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
638 case "create_zip":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
639 document.querySelector( "#modules .dev-window" ).insertAdjacentHTML( "beforeend", r.answer );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
640 break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
641 case "cms_check_update":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
642 case "cms_check_dev_update":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
643 document.querySelector( "#modules .check-answer" ).innerHTML = r.answer;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
644 break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
645 case "cms_changed_files":
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
646 let div = document.querySelector( "#modules .changed-files" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
647 div.innerHTML = r.answer;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
648 div.style.display = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
649 break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
650 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
651 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
652 if ( r.info_text ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
653 notify( r.info_text, r.info_class, r.info_time );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
654 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
655 if ( r.reload ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
656 setTimeout( function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
657 window.location.reload( true );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
658 }, r.info_time );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
659 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
660 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
661 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
662 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
663
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
664 // show update from dev buttons
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
665 document.querySelectorAll( "#modules [data-show-dev]" ).forEach( function( btn ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
666 btn.addEventListener( "click", function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
667 let dev = document.querySelector( "#modules .developers_only" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
668 if ( dev ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
669 dev.classList.remove( "developers_only" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
670 if ( window.location.host == "dev.coffee-cms.ru" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
671 dev.querySelector( "#modules [data-fn='create_zip']" ).removeAttribute( "style" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
672 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
673 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
674 this.remove();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
675 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
676 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
677
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
678 } );