annotate .cms/js/pages.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 document.addEventListener( "DOMContentLoaded", function( event ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
2
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
3 function _( str ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
4 return __( str, "pages.mod.php" );
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 // Полностью этот скрипт отключить нельзя если включены Инструменты,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
8 // поэтому нужна проверка
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 if ( document.querySelector( "#pages" ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10 api( { fn: "get_pages_list" }, set_pages_list );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13 function set_pages_list( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 if ( ! document.querySelector( "#pages" ) ) return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17 if ( r.no_database ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 document.querySelector( "#pages .pages-grid" ).innerHTML = r.no_database;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 if ( r.overloaded ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 let m = _( "server_overloaded_xxx" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 m = m.replace( "xxx", r.pages.length );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25 notify( m, "info-error", 5000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28 // Запоминаем результаты какого поиска мы получили
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 let pages_search = document.querySelector( "#pages .page-search" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32 pages_search.setAttribute( "data-result-of", r.search );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 let grid = document.querySelector( "#pages .pages-grid" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35 let count = document.querySelector( "#pages .main-footer .count" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36 let loaded = document.querySelector( "#pages .main-footer .loaded" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37 if ( cms.clear_pages_list ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 cms.clear_pages_list = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 grid.innerHTML = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40 loaded.value = "0";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 // Всего страниц в БД
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 count.innerText = r.count;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 // При удалении страниц подгружаются последние и не нужно менять смещение у пейджера
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 if ( cms.dont_change_offset ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 cms.dont_change_offset = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 loaded.setAttribute( "data-offset", r.offset );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 // insert pages
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54 let start = Date.now();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55 for ( let i = 0; i < r.pages.length; i++ ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 grid.insertAdjacentHTML( "beforeend", r.pages[i].html );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57 loaded.value = +loaded.value + 1;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58 let page = grid.querySelector( `[data-id="${r.pages[i].id}"]` );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 set_controls( page );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 if ( Date.now() - start > 1000 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61 let m = _( "browser_overloaded_xxx" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62 m = m.replace( "xxx", i + 1 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63 m = m.replace( "nnn", r.pages.length );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 notify( m, "info-error", 5000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65 break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 create_pager();
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 // поэтому была вызвана функция загрузки страниц с пустым поиском
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
73 // и пришло время создать новую страницу
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
74 if ( cms.create_page_fn ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
75 cms.create_page_fn();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
76 cms.create_page_fn = null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
77 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
78
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
79 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
80
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
81 function create_pager() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
82 let loaded = document.querySelector( "#pages .main-footer .loaded" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
83 let offset = parseInt( loaded.getAttribute( "data-offset" ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
84 let count = parseInt( document.querySelector( "#pages .main-footer .count" ).innerText );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
85 if ( count === 0 ) { count++; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
86 let cookie_pp = get_cookie( "pages_pager" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
87 let pages = Math.ceil( count / cookie_pp );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
88 let pager = document.querySelector( "#pages .main-footer .pager" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
89 pager.innerHTML = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
90 if ( pages > 1 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
91 for ( let i = 1; i <= pages; i++ ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
92 let p = document.createElement( "div" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
93 p.innerText = i;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
94 p.setAttribute( "data-offset", ( i - 1 ) * cookie_pp );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
95 pager.appendChild( p );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
96 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
97 pager.querySelector( `[data-offset="${offset}"]` ).classList.add( "active" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
98 pager.childNodes.forEach( function( el ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
99 el.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
100 let offset = this.getAttribute( "data-offset" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
101 let search = document.querySelector( "#pages .page-search" ).value;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
102 let data = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
103 fn: "get_pages_list",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
104 offset: offset,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
105 search: search
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
106 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
107 document.querySelector( "#pages .main-main" ).scrollTop = 0;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
108 cms.clear_pages_list = true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
109 api( data, set_pages_list );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
110 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
111 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
112 // scroll
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
113 pager.onmousedown = function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
114 let pageX = 0;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
115 let pageY0 = 0;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
116
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
117 document.onmousemove = function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
118 if ( pageX !== 0 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
119 pager.scrollLeft = pager.scrollLeft + ( pageX - e.pageX );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
120 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
121 pageX = e.pageX;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
122 // fix for google chrome
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
123 if ( pageY0 === 0 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
124 pageY0 = e.pageY;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
125 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
126 if ( Math.abs( pageY0 - e.pageY ) > 64 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
127 const event = new Event( "mouseup" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
128 pager.dispatchEvent( event );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
129 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
130 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
131
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
132 // end drag
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
133 pager.onmouseup = function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
134 document.onmousemove = null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
135 pager.onmouseup = null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
136 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
137
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
138 // disable browser drag
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
139 pager.ondragstart = function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
140 return false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
141 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
142 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
143 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
144 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
145
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
146 // pager counter
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
147 let pager_counter = document.querySelector( "#pages .main-footer input" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
148 if ( pager_counter ) pager_counter.addEventListener( "keydown", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
149 if ( e.keyCode === 13 ) { // keyCode work on mobile
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
150 let p = document.querySelector( "#pages .main-footer input" ).value;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
151 set_cookie_expires( "pages_pager", p );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
152 cms.clear_pages_list = true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
153 api( { fn: "get_pages_list", search: document.querySelector( "#pages .page-search" ).value }, set_pages_list );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
154 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
155 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
156
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
157 function set_controls( selector ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
158
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
159 // Open properties
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
160 selector.querySelectorAll( ".page-prop-btn" ).forEach( function( button ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
161 button.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
162 let id = this.closest( "[data-id]" ).getAttribute( "data-id" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
163 document.querySelector( `#pages .pages-grid [data-id="${id}"]` ).classList.toggle( "open" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
164 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
165 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
166
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
167 // Save properties
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
168 selector.querySelectorAll( ".page-prop-save-btn" ).forEach( function( button ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
169 button.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
170 let id = this.closest( "[data-id]" ).getAttribute( "data-id" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
171 let item = document.querySelector( `#pages .pages-grid [data-id="${id}"] ` );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
172 let data = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
173 fn: "save_prop",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
174 id: id,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
175 title: item.querySelector( '[name="title"]' ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
176 seo_title: item.querySelector( '[name="seo_title"]' ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
177 url: item.querySelector( '[name="url"]' ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
178 date: item.querySelector( '[name="date"]' ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
179 time: item.querySelector( '[name="time"]' ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
180 template: item.querySelector( '.template-select-grid .field-select' ).getAttribute( "data-template" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
181 old_template: item.querySelector( '.template-select-grid .field-select' ).getAttribute( "data-old-template" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
182 description: item.querySelector( '[name="description"]' ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
183 tags: item.querySelector( '[name="tags"]' ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
184 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
185 api( data, function( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
186 if ( r.ok == "false" ) { // FIXME: never fire
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
187 notify( r.info_text, r.info_class, 5000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
188 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
189 if ( r.ok == "true" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
190
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
191 // Update Title, URL and Date
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
192 item.querySelector( ".page-name" ).innerHTML = r.title;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
193 item.querySelector( ".page-name" ).setAttribute( "href", r.base_path + r.url );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
194 update_home();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
195 let url_el = item.querySelector( "[name=url]" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
196 if ( url_el.value != r.url ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
197 notify( _( "url_changed" ), "info-error", 5000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
198 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
199 url_el.value = r.url;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
200 let date = item.querySelector( ".page-date" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
201 date.innerHTML = r.created;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
202 if ( r.planned ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
203 date.classList.add( "future" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
204 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
205 date.classList.remove( "future" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
206 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
207
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
208 // update old template
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
209 item.querySelector( '.template-select-grid .field-select' ).setAttribute( "data-old-template", data.template );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
210
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
211 // edit marker
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
212 document.querySelectorAll( "#pages .pages-grid > div" ).forEach( function( el ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
213 el.classList.remove( "last-edited" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
214 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
215 setTimeout( function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
216 item.classList.add( "last-edited" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
217 }, 200 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
218
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
219 // highlight save button
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
220 button.classList.add( "saved" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
221 setTimeout( function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
222 button.classList.remove( "saved" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
223 }, 200 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
224
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
225 notify( r.info_text, r.info_class, 5000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
226
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
227 // update event for menu
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
228 if ( r.update_menu == "true" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
229 let event = new Event( "update_menu" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
230 document.body.dispatchEvent( event );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
231 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
232 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
233
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
234 } );
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 // Pin Page
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
239 selector.querySelectorAll( ".pin" ).forEach( function( pin ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
240 pin.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
241 let box = this.closest( "[data-id]" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
242 let id = box.getAttribute( "data-id" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
243 let pin = box.getAttribute( "data-pin" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
244 if ( pin === "1" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
245 pin = "0";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
246 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
247 pin = "1";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
248 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
249 let data = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
250 fn: "page_pin",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
251 id: id,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
252 pin: pin
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
253 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
254 api( data, function( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
255 if ( r.ok == "true" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
256 box.setAttribute( "data-pin", pin );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
257 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
258 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
259 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
260 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
261
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
262 // Publish Page
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
263 selector.querySelectorAll( ".published" ).forEach( function( pub ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
264 pub.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
265 let box = this.closest( "[data-id]" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
266 let id = box.getAttribute( "data-id" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
267 let published = box.getAttribute( "data-published" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
268 if ( published === "1" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
269 published = "0";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
270 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
271 published = "1";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
272 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
273 let data = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
274 fn: "page_publish",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
275 id: id,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
276 published: published
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
277 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
278 api( data, function( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
279 if ( r.ok == "true" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
280 box.setAttribute( "data-published", published );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
281 if ( published == "1" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
282 pub.setAttribute( "title", _( "published" ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
283 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
284 pub.setAttribute( "title", _( "unpublished" ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
285 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
286 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
287 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
288 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
289 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
290
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
291 // Edit page
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
292 selector.querySelectorAll( ".page-edit-btn" ).forEach( function( button ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
293 button.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
294 button.classList.add( "loading" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
295 let id = this.closest( "[data-id]" ).getAttribute( "data-id" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
296 // get page from server
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
297 api( { fn: "get_page", id: id }, function( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
298 button.classList.remove( "loading" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
299 if ( r.result == "ok" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
300 let title = document.querySelector( "#pages .page-editor-title" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
301 title.innerHTML = r.page.title;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
302 title.setAttribute( "href", r.base_path + r.page.url );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
303 let props = document.querySelector( "#pages .page-properties" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
304 props.querySelector( "input[name='title']" ).value = r.page.title;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
305 props.querySelector( "input[name='url']" ).value = r.page.url;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
306 props.querySelector( "input[name='seo_title']" ).value = r.page.seo_title;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
307 props.querySelector( "textarea[name='description']" ).value = r.page.description;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
308 props.querySelector( "textarea[name='tags']" ).value = r.page.tags;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
309 props.querySelector( "input[name='date']" ).value = r.date;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
310 props.querySelector( "input[name='time']" ).value = r.time;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
311 let select = props.querySelector( ".template-select-grid" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
312 let options = select.querySelector( ".field-options" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
313 options.innerHTML = r.options;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
314 let tpl = select.querySelector( ".field-select" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
315 tpl.setAttribute( "data-template", r.option );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
316 tpl.setAttribute( "data-old-template", r.option );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
317 tpl.querySelector( ".value" ).innerText = r.option_tr;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
318 document.querySelector( "#pages .page-editor > textarea" ).value = r.page.text;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
319 if ( r.page.modified != null ) { // prevent delete attribute
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
320 document.querySelector( "#pages .page-editor > textarea" ).setAttribute( "data-modified", r.page.modified );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
321 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
322 document.querySelector( "#pages .save-page-button" ).setAttribute( "data-id", r.page.id );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
323
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
324 options.querySelectorAll( ".option" ).forEach( function( option ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
325 option.addEventListener( "click", click_select_option );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
326 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
327
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
328
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
329 // Images
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
330 document.querySelector( "#pages .link-file-tag" ).innerHTML = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
331 document.querySelector( "#pages .del-uploaded-files" ).classList.add( "disabled" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
332 document.querySelector( "#pages .mediateka-files-grid" ).innerHTML = r.flist;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
333 document.querySelectorAll( "#pages .mediateka-files-grid input[type=checkbox]" ).forEach( function( checkbox ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
334 checkbox.addEventListener( "dblclick", img_check_dblclick );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
335 checkbox.addEventListener( "change", img_rechecked );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
336 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
337 document.querySelectorAll( "#pages .file-block" ).forEach( function( block ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
338 block.addEventListener( "click", img_click );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
339 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
340 document.querySelectorAll( "#pages .mediateka-files-grid img" ).forEach( function( img ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
341 img.addEventListener( "dblclick", img_lbox );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
342 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
343
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
344 // Show Editor
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
345 document.querySelector( "#pages .page-editor-bg" ).classList.remove( "hidden" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
346 document.body.classList.add( "editor" ); // for notifications
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
347
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
348 // Connect Editor
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
349 codemirror_connect( "#pages .page-editor > textarea", "cm" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
350
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
351 // restore scroll and cursor position
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
352 let cursor = localStorage.getItem( "cursor_page_" + id );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
353 if ( cursor ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
354 cursor = JSON.parse( cursor );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
355 window.cm.scrollTo( cursor.left, cursor.top );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
356 window.cm.setCursor( { line:cursor.line, ch:cursor.ch } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
357 window.cm.refresh();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
358 //window.cm.scrollIntoView( { line:cursor.line, ch:cursor.ch } ); // fix glitch
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
359 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
360
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
361 // track changes
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
362 document.querySelector( "#pages .close-page-button" ).setAttribute( "data-changed", "false" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
363 document.querySelector( "#pages .page-editor-grid" ).setAttribute( "data-changed", "false" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
364 cm.on( "change", function( cm, change ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
365 document.querySelector( "#pages .close-page-button" ).setAttribute( "data-changed", "true" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
366 document.querySelector( "#pages .page-editor-grid" ).setAttribute( "data-changed", "true" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
367 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
368 // save scroll and cursor position
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
369 [ "cursorActivity", "scroll" ].forEach( function( event ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
370 cm.on( event, function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
371 let cursor = window.cm.getCursor();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
372 let scroll = window.cm.getScrollInfo();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
373 localStorage.setItem( "cursor_page_" + id, JSON.stringify( { line:cursor.line, ch:cursor.ch, left: scroll.left, top: scroll.top } ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
374 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
375 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
376
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
377 // set focus to editor
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
378 cm.focus();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
379
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
380 // Save Page Ctrl+S
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
381 document.documentElement.addEventListener( "keydown", CtrlS );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
382
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
383 // open tags panel
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
384 if ( document.documentElement.offsetWidth >= 1024 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
385 document.querySelector( "#pages .page-editor-grid" ).classList.add( "tags-opened" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
386 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
387 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
388 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
389 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
390 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
391
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
392 // Select
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
393 selector.querySelectorAll( ".field-select" ).forEach( function( select ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
394 select.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
395 e.stopPropagation();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
396 this.parentElement.classList.toggle( "open" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
397
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
398 // это можно убрать если переставить стили на родителя
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
399 select.nextElementSibling.classList.toggle( "open" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
400 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
401 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
402 // Option шаблона
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
403 // вынесено в функцию потому что динамическое изменение
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
404 selector.querySelectorAll( ".field-options .option" ).forEach( function( option ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
405 option.addEventListener( "click", click_select_option );
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 // Транслитерация URL
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
409 selector.querySelectorAll( ".url-translit" ).forEach( function( btn ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
410 btn.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
411 let url = selector.querySelector( "input[name='title']" ).value;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
412 let tr_url = url_translit( url );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
413 this.previousElementSibling.value = tr_url;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
414 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
415 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
416
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
417 // Выбор всех страниц двойным кликом
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
418 let check = selector.querySelector( `:scope > input[type=checkbox]` );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
419 if ( check ) check.addEventListener( "dblclick", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
420 let stat = ! this.checked;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
421 document.querySelectorAll( "#pages .pages-grid > div > input[type=checkbox]" ).forEach( function( chbox ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
422 chbox.checked = stat;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
423 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
424 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
425
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 function click_select_option( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
430 let select = this.closest( ".template-select-grid" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
431 let value = this.getAttribute( "value" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
432 select_switch_to( select, value );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
433 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
434
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
435 //
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
436 function select_switch_to( select, value ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
437 let field_select = select.querySelector( ".field-select" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
438 let old_value = field_select.getAttribute( "data-template" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
439 if ( old_value != value ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
440 let old_name = field_select.innerText;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
441 let field_options = select.querySelector( ".field-options" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
442 let option = field_options.querySelector( `[value="${value}"]` );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
443 field_select.querySelector( ".value" ).innerText = option.innerText;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
444 field_select.setAttribute( "data-template", value );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
445 option.remove();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
446 let option_html = `<div class=option value="${old_value}">${old_name}</div>`;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
447 field_options.insertAdjacentHTML( "afterbegin", option_html );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
448 field_options.firstChild.addEventListener( "click", click_select_option );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
449 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
450 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
451
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
452 // Select for editor
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
453 document.querySelectorAll( ".page-properties .field-select" ).forEach( function( select ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
454 select.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
455 e.stopPropagation();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
456 this.parentElement.classList.toggle( "open" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
457 // это можно убрать если переставить стили на родителя
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
458 select.nextElementSibling.classList.toggle( "open" );
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 // Select
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
463 // Закрытие выпадающих списков при кликах вне их, а так же по ним
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
464 document.body.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
465 document.querySelectorAll( "#pages .template-select-grid" ).forEach( function( list ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
466 list.classList.remove( "open" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
467 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
468
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
469 // это можно убрать если переставить стили на родителя
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
470 document.querySelectorAll( "#pages .field-options" ).forEach( function( list ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
471 list.classList.remove( "open" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
472 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
473 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
474
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
475 // Search page
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
476 let pages_search = document.querySelector( "#pages .page-search" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
477 if ( pages_search ) pages_search.addEventListener( "keydown", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
478 if ( e.keyCode === 13 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
479 // сохраняем событие целиком чтобы ниже считать Shift, Ctrl, Alt
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
480 cms.search_event = e;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
481 search_pages();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
482 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
483 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
484
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
485 let search_btn = document.querySelector( "#pages .page-search-button" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
486 if ( search_btn ) search_btn.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
487 // клик по кнопке не дает Ctrl, Shift, Alt, запишем это
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
488 cms.search_event = { "ctrlKey": false, "shiftKey": false, "altKey": false };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
489 search_pages();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
490 document.querySelector( "#pages .page-search" ).focus();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
491 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
492
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
493 function search_pages() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
494 let search_string = document.querySelector( "#pages .page-search" ).value;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
495 let data = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
496 fn: "get_pages_list",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
497 search: search_string,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
498 Ctrl: cms.search_event.ctrlKey,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
499 Shift: cms.search_event.shiftKey,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
500 Alt: cms.search_event.altKey,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
501 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
502 cms.clear_pages_list = true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
503 api( data, set_pages_list );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
504 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
505
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
506 // Reset Search
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
507 let reset_btn = document.querySelector( "#pages .reset" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
508 if ( reset_btn ) reset_btn.addEventListener( "click", function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
509 document.querySelector( "#pages .page-search" ).value = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
510 document.querySelector( "#pages .page-search-button" ).click();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
511 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
512
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
513 // Delete pages
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
514 document.querySelectorAll( "#pages .del-pages-btn" ).forEach( function( button ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
515 button.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
516 let ids = [];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
517 document.querySelectorAll( "#pages .pages-grid input[type=checkbox]:checked" ).forEach( function( ch ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
518 let id = ch.closest( "[data-id]" ).getAttribute( "data-id" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
519 ids.push( id );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
520 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
521 if ( ids.length === 0 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
522 notify( _( "no_selected_pages" ), "info-error", 5000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
523 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
524 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
525 if ( ! confirm( _( "confirm_delete_pages" ) ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
526 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
527 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
528 let data = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
529 fn: "del_pages",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
530 ids: ids
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
531 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
532 api( data, function( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
533 if ( r.info_text ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
534 notify( r.info_text, r.info_class, 5000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
535 if ( r.info_class == "info-success" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
536 data.ids.forEach( function( id ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
537 document.querySelector( `#pages .pages-grid [data-id="${id}"]` ).remove();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
538 localStorage.removeItem( "cursor_page_" + id );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
539 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
540 let count = document.querySelector( "#pages .main-footer .count" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
541 let loaded = document.querySelector( "#pages .main-footer .loaded" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
542 loaded.value = parseInt( loaded.value ) - data.ids.length;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
543 count.innerText = parseInt( count.innerText ) - data.ids.length;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
544 // load pages
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
545 let offset = +loaded.getAttribute( "data-offset" ) + document.querySelectorAll( "#pages .pages-grid > *" ).length;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
546 let search = document.querySelector( "#pages .page-search" ).value;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
547 let data2 = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
548 fn: "get_pages_list",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
549 count: data.ids.length,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
550 offset: offset,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
551 search: search
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
552 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
553 // Не менять атрибут смещения у пейджера
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
554 cms.dont_change_offset = true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
555 api( data2, set_pages_list );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
556 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
557 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
558 // update event for menu
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
559 if ( r.update_menu == "true" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
560 let event = new Event( "update_menu" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
561 document.body.dispatchEvent( event );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
562 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
563 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
564 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
565 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
566
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
567 // copy file link button
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
568 document.querySelector( "#pages .link-file-copy-btn" ).addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
569 let img = this.previousElementSibling.innerText;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
570 let tmp = document.createElement( "textarea" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
571 document.body.appendChild( tmp );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
572 tmp.value = img;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
573 tmp.select();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
574 let r = document.execCommand( "copy" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
575 tmp.remove();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
576 if ( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
577 if ( img ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
578 notify( _( "copyed" ), "info-success", 5000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
579 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
580 notify( _( "select_file" ), "info-error", 5000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
581 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
582 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
583 notify( _( "copy_error" ), "info-error", 5000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
584 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
585 cm.focus();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
586 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
587
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
588 function CtrlS( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
589 // ы and і - fix for librewolf
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
590 if ( ( e.code == "KeyS" || e.key == "ы" || e.key == "і" ) && e.ctrlKey == true ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
591 e.preventDefault(); // don't save page
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
592 if ( window.location.hash == "#pages" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
593 document.querySelector( "#pages .save-page-button" ).click();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
594 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
595 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
596 /*/ Ловим кнопки codemirror
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
597 if ( e.code == "F1" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
598 let dialog = document.querySelector( ".CodeMirror-dialog-top" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
599 let html = dialog.outerHTML;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
600 cms.dialog = html;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
601 //notify( html, "info-success", 5000000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
602 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
603 if ( e.code == "F2" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
604 document.querySelector( ".CodeMirror" ).insertAdjacentHTML( "beforeend", cms.dialog );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
605 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
606 */
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
607 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
608
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
609 // Save Page
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
610 document.querySelectorAll( "#pages .save-page-button" ).forEach( function( button ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
611 button.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
612 window.cm.save(); // drop changes to textarea
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
613 let main_div = document.querySelector( "#pages" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
614 let prop_div = main_div.querySelector( ".page-properties" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
615 let data = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
616 fn: "save_page",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
617 id: main_div.querySelector( ".save-page-button" ).getAttribute( "data-id" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
618 modified: main_div.querySelector( ".page-editor > textarea" ).getAttribute( "data-modified" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
619 text: main_div.querySelector( ".page-editor > textarea" ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
620 title: prop_div.querySelector( "input[name='title']" ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
621 url: prop_div.querySelector( "input[name='url']" ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
622 seo_title: prop_div.querySelector( "input[name='seo_title']" ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
623 description: prop_div.querySelector( "textarea[name='description']" ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
624 tags: prop_div.querySelector( "textarea[name='tags']" ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
625 date: prop_div.querySelector( "input[name='date']" ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
626 time: prop_div.querySelector( "input[name='time']" ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
627 template: prop_div.querySelector( ".template-select-grid .field-select" ).getAttribute( "data-template" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
628 old_template: prop_div.querySelector( ".template-select-grid .field-select" ).getAttribute( "data-old-template" ),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
629 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
630 api( data, function( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
631 if ( r.ok == "true" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
632 // set text
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
633 if ( r.new_text ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
634 window.cm.setValue( r.new_text );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
635 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
636
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
637 // Update Title and URL
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
638 main_div.querySelector( ".page-editor-title" ).innerHTML = r.title;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
639 main_div.querySelector( ".page-editor-title" ).setAttribute( "href", r.base_path + r.url );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
640 prop_div.querySelector( "input[name='url']" ).value = r.url;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
641
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
642 // update old template
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
643 prop_div.querySelector( ".template-select-grid .field-select" ).setAttribute( "data-old-template", data.template );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
644
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
645 // Update item in page list
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
646 let item = main_div.querySelector( `.pages-grid [data-id='${data.id}']` );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
647 item.querySelector( `.page-name` ).innerHTML = r.title;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
648 item.querySelector( `.page-name` ).setAttribute( "href", r.base_path + r.url );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
649 update_home();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
650 item.querySelector( `input[name='title']` ).value = r.title;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
651 item.querySelector( `input[name='url']` ).value = r.url;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
652 item.querySelector( `input[name='seo_title']` ).value = data.seo_title;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
653 item.querySelector( `textarea[name='description']` ).value = data.description;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
654 item.querySelector( `textarea[name='tags']` ).value = data.tags;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
655
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
656 // Выставить шаблон в плашке в списке страниц
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
657 let select = item.querySelector( `.template-select-grid` );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
658 select_switch_to( select, data.template );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
659 item.querySelector( `.template-select-grid .field-select` ).setAttribute( "data-old-template", data.template );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
660
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
661 item.querySelector( `input[name='date']` ).value = data.date;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
662 item.querySelector( `input[name='time']` ).value = data.time;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
663 if ( r.planned ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
664 item.querySelector( `.page-date` ).classList.add( "future" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
665 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
666 item.querySelector( `.page-date` ).classList.remove( "future" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
667 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
668
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
669 main_div.querySelector( ".page-editor > textarea" ).setAttribute( "data-modified", r.modified );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
670 main_div.querySelector( ".close-page-button" ).setAttribute( "data-changed", "false" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
671 main_div.querySelector( ".page-editor-grid" ).setAttribute( "data-changed", "false" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
672 // edit marker
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
673 main_div.querySelectorAll( ".pages-grid > div" ).forEach( function( item ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
674 item.classList.remove( "last-edited" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
675 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
676 item.classList.add( "last-edited" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
677 // close editor after save
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
678 if ( main_div.querySelector( ".save-page-button" ).getAttribute( "data-close" ) === "true" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
679 main_div.querySelector( ".save-page-button" ).setAttribute( "data-close", "false" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
680 main_div.querySelector( ".close-page-button" ).click();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
681 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
682 // highlight save button
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
683 main_div.querySelector( ".save-page-button" ).classList.add( "saved" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
684 setTimeout( function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
685 main_div.querySelector( ".save-page-button" ).classList.remove( "saved" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
686 }, 1000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
687
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
688 notify( r.info_text, r.info_class, r.info_time );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
689
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
690 // update event for menu
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
691 if ( r.update_menu == "true" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
692 let event = new Event( "update_menu" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
693 document.body.dispatchEvent( event );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
694 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
695 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
696 if ( r.ok == "false" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
697 // highlight save button
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
698 main_div.querySelector( ".save-page-button" ).classList.add( "error" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
699 setTimeout( function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
700 main_div.querySelector( ".save-page-button" ).classList.remove( "error" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
701 }, 1000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
702
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
703 notify( r.info_text, r.info_class, r.info_time );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
704 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
705 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
706 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
707 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
708
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
709 // transliterate file name
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
710 function __tr_file( str ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
711 let ext = str.match( /\.[^\.]+$/, "" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
712 str = str.replace( /\.[^\.]+$/, "" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
713 let sp = cms.tr[" "];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
714 cms.tr[" "] = "_";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
715 for ( let i in cms.tr ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
716 let re = new RegExp( i, "g" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
717 str = str.replace( re, cms.tr[i] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
718 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
719 if ( sp === undefined ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
720 delete cms.tr[" "];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
721 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
722 cms.tr[" "] = sp;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
723 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
724 str = str.replace( /[^-A-Za-z0-9_]+/g, "" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
725 if ( ext[0] ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
726 str = str + ext[0];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
727 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
728 str = str.toLowerCase();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
729 return str;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
730 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
731
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
732 // Upload files
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
733 let upload_btn = document.querySelector( "#pages .upload-files input[type=file]" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
734 if ( upload_btn ) upload_btn.addEventListener( "change", async function( event ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
735 const formData = new FormData();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
736 let id = document.querySelector( "#pages .save-page-button" ).getAttribute( "data-id" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
737 formData.append( "id", id );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
738 formData.append( "fn", "upload_files" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
739 let n = 0;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
740 for ( let i = 0; i < this.files.length; i++ ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
741 formData.append( "myfile[]", this.files[i] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
742 let f = `${cms.base_path}uploads/${id}/` + __tr_file( this.files[i].name );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
743 let f_exists = document.querySelector( `#pages .file-block [data-src="${f}"]` );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
744 if ( f_exists ) { n++; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
745 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
746 let google_chrome_fix = this;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
747 if ( n ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
748 let c = confirm( _( "same_files" ) + ` - ${n} ` + _( "pc" ) + "\n" + _( "confirm_replace" ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
749 if ( ! c ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
750 google_chrome_fix.value = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
751 return c;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
752 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
753 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
754 let bar = document.querySelector( "#pages .upload-progress" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
755
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
756
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
757 let ajax = new XMLHttpRequest();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
758
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
759 ajax.upload.addEventListener( "progress", function( event ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
760 let percent = Math.round( (event.loaded / event.total) * 100 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
761 bar.style.width = percent + "%";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
762 }, false );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
763
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
764 ajax.addEventListener( "error", function( event ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
765 notify( _( "error_upload_file" ), "info-error", 3600000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
766 bar.style = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
767 }, false );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
768
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
769 ajax.addEventListener( "abort", function( event ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
770 notify( _( "error_upload_file" ), "info-error", 3600000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
771 bar.style = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
772 }, false );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
773
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
774 ajax.addEventListener( "load", function( event ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
775 bar.style = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
776 google_chrome_fix.value = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
777 if ( event.target.status == 413 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
778 notify( _( "too_large" ), "info-error", 5000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
779 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
780 let r = JSON.parse( event.target.responseText );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
781 if ( r.info_text ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
782 notify( r.info_text, r.info_class, r.info_time );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
783 if ( r.info_class == "info-success" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
784
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
785 // удалить файлы которые были обновлены
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
786 let tmp = document.createElement( "div" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
787 tmp.innerHTML = r.flist;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
788 let imgs = tmp.querySelectorAll( "img" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
789 imgs.forEach( function( img ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
790 let file = img.getAttribute( "data-src" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
791 let exists_file = document.querySelector( `#pages .file-block [data-src="${file}"]` );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
792 if ( exists_file ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
793 exists_file.parentElement.remove();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
794 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
795 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
796
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
797 let container = document.querySelector( "#pages .mediateka-files-grid" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
798 container.innerHTML = r.flist + container.innerHTML;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
799
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
800 // images checkboxes
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
801 container.querySelectorAll( "input[type=checkbox]" ).forEach( function( checkbox ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
802 checkbox.addEventListener( "dblclick", img_check_dblclick );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
803 checkbox.addEventListener( "change", img_rechecked );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
804 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
805
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
806 // open lightbox
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
807 container.querySelectorAll( "img" ).forEach( function( img ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
808 img.addEventListener( "dblclick", img_lbox );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
809 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
810
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
811 // generate link
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
812 container.querySelectorAll( ".file-block" ).forEach( function( file_block ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
813 file_block.addEventListener( "click", img_click );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
814 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
815
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
816 // select last uploaded
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
817 container.querySelector( ".file-block" ).click();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
818 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
819 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
820 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
821 }, false );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
822
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
823 ajax.open( "POST", cms.api );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
824 ajax.send( formData );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
825
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
826 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
827
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
828 // Close Editor
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
829 document.querySelectorAll( "#pages .close-page-button" ).forEach( function( button ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
830 button.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
831
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
832 // hide mediateka
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
833 if ( ! document.querySelector( "#pages .page-editor-panel" ).classList.contains( "hidden" ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
834 document.querySelector( "#pages .open-mediateka" ).click();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
835 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
836
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
837 // hide editor
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
838 document.querySelector( "#pages .page-editor-bg" ).classList.add( "hidden" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
839 document.body.classList.remove( "editor" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
840
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
841 document.documentElement.removeEventListener( "keydown", CtrlS );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
842
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
843 // detach
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
844 if ( window.cm !== undefined ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
845 if ( this.getAttribute( "data-changed" ) === "true" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
846 if ( confirm( _( "confirm_save" ) ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
847 document.querySelector( "#pages .save-page-button" ).setAttribute( "data-close", "true" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
848 document.querySelector( "#pages .save-page-button" ).click();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
849 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
850 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
851 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
852 window.cm.toTextArea();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
853 window.cm = null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
854 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
855
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
856 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
857 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
858
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
859 // Create Page
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
860 document.querySelectorAll( "#pages .add-page-btn" ).forEach( function( btn ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
861 btn.addEventListener( "click", function ( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
862 // Отложенный вызов на случай если нужно очистить поиск
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
863 cms.create_page_fn = function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
864 api( { fn: "create_page" }, function( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
865 if ( r.info_text ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
866 notify( r.info_text, r.info_class, r.info_time );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
867 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
868 if ( r.pages ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
869 let grid = document.querySelector( "#pages .pages-grid" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
870 grid.insertAdjacentHTML( "afterbegin", r.pages[0].html );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
871 // Подкрутить список страниц в начало
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
872 document.querySelector( "#pages .main-main" ).scrollTop = 0;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
873
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
874 let page_box = grid.querySelector( `[data-id="${r.pages[0].id}"]` );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
875
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
876 set_controls( page_box );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
877
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
878 let counter = document.querySelector( "#pages .main-footer .count" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
879 counter.innerText = +counter.innerText + 1;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
880
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
881 let showed_pages_el = document.querySelector( "#pages .main-footer .counters input" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
882 if ( showed_pages_el.value === get_cookie( "pages_pager" ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
883 document.querySelector( "#pages .pages-grid > div:last-child" ).remove();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
884 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
885 showed_pages_el.value = +showed_pages_el.value + 1;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
886 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
887 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
888 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
889 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
890 // Если сейчас не результаты поиска отображены,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
891 // и если мы видим первый пейджер
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
892 // то сразу выполнить создание страницы
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
893 let empty_search = document.querySelector( "#pages .page-search" ).getAttribute( "data-result-of" ) === "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
894 let offset_zero = +document.querySelector( "#pages .main-footer .counters input" ).getAttribute( "data-offset" ) === 0;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
895 if ( empty_search && offset_zero ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
896 cms.create_page_fn();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
897 cms.create_page_fn = null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
898 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
899 document.querySelector( "#pages .reset" ).click();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
900 // Создание страницы произведет функция set_pages_list()
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
901 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
902 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
903 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
904
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
905 // Open Properties
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
906 document.querySelector( "#pages .open-properties" ).addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
907 document.querySelector( "#pages .page-editor-grid" ).classList.toggle( "properties" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
908 document.querySelector( "#pages .page-properties" ).classList.toggle( "hidden" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
909 if ( window.cm ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
910 let cursor = window.cm.getCursor();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
911 window.cm.scrollIntoView( { line:cursor.line, ch:cursor.ch } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
912 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
913 if ( document.querySelector( "#pages .page-editor-grid" ).classList.contains( "properties" ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
914 document.querySelector( "#pages .page-editor-grid" ).classList.remove( "mediateka" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
915 document.querySelector( "#pages .page-editor-panel" ).classList.add( "hidden" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
916 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
917 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
918
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
919 // Open Mediateka
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
920 document.querySelector( "#pages .open-mediateka" ).addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
921 document.querySelector( "#pages .page-editor-grid" ).classList.toggle( "mediateka" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
922 document.querySelector( "#pages .page-editor-panel" ).classList.toggle( "hidden" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
923 if ( window.cm ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
924 let cursor = window.cm.getCursor();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
925 window.cm.scrollIntoView( { line:cursor.line, ch:cursor.ch } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
926 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
927 if ( document.querySelector( "#pages .page-editor-grid" ).classList.contains( "mediateka" ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
928 document.querySelector( "#pages .page-editor-grid" ).classList.remove( "properties" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
929 document.querySelector( "#pages .page-properties" ).classList.add( "hidden" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
930 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
931 cm.focus();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
932 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
933
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
934 // Replace Dialog Toggle
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
935 document.querySelector( "#pages .codemirror-replace" ).addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
936 let dialog = document.querySelector( "#pages .CodeMirror-dialog" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
937 if ( dialog ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
938 dialog.remove();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
939 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
940 let mediateka = ! document.querySelector( "#pages .page-editor-panel" ).classList.contains( "hidden" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
941 if ( mediateka && window.innerWidth < 1024 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
942 document.querySelector( "#pages .open-mediateka" ).click();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
943 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
944 window.cm.execCommand( "replace" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
945 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
946 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
947
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
948 // generate link to clicked file
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
949 function img_click() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
950 this.parentElement.querySelectorAll( ".file-block" ).forEach( function( block ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
951 block.classList.remove( "active-file" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
952 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
953 this.classList.add( "active-file" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
954 let i = this.querySelector( "img" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
955 let t = i.getAttribute( "data-type" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
956 let link = i.getAttribute( "data-src" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
957 let w = i.getAttribute( "width" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
958 let h = i.getAttribute( "height" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
959 let e = link.replace( /.*\./, "" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
960 let img = [ "webp", "tiff", "jpeg", "jpg", "png", "svg", "gif", "bmp", "ico" ];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
961 let mus = [ "mp3", "ogg", "m4a", "flac" ];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
962 let vid = [ "mp4", "mkv", "webm" ];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
963 let a = `<a href="${link}" target=_blank>${link}</a>`;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
964 let tag = this.closest( ".mediateka-grid" ).querySelector( ".link-file-tag" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
965 if ( img.indexOf( e ) >= 0 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
966 link = `&lt;img alt="" src="${a}"`;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
967 if ( w ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
968 link += ` width="${w}"`;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
969 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
970 if ( h ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
971 link += ` height="${h}"`;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
972 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
973 link += ` loading="lazy"`;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
974 link += "&gt;";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
975 tag.innerHTML = link;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
976 } else if ( mus.indexOf( e ) >= 0 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
977 link = `&lt;audio src="${a}" controls>&lt;/audio>`;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
978 tag.innerHTML = link;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
979 } else if ( vid.indexOf( e ) >= 0 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
980 link = `&lt;video src="${a}" poster="" controls preload="none">&lt;/video>`;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
981 tag.innerHTML = link;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
982 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
983 link = `&lt;a href="${a}"&gt;TEXT&lt;/a&gt;`;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
984 tag.innerHTML = link;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
985 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
986 let inner_link = tag.querySelector( "a" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
987 inner_link.addEventListener( "click", file_link_click );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
988 cm.focus();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
989 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
990
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
991 function file_link_click( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
992 e.preventDefault();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
993 let tmp = document.createElement( "textarea" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
994 document.body.appendChild( tmp );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
995 tmp.value = e.target.getAttribute( "href" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
996 tmp.select();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
997 let r = document.execCommand( "copy" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
998 tmp.remove();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
999 if ( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1000 notify( _( "copyed" ), "info-success", 5000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1001 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1002 notify( _( "copy_error" ), "info-error", 5000 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1003 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1004 cm.focus();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1005 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1006
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1007 // enable or disable delete files button
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1008 function img_rechecked() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1009 let checked = document.querySelectorAll( "#pages .mediateka-files-grid input[type=checkbox]:checked" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1010 if ( checked.length ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1011 document.querySelector( "#pages .del-uploaded-files" ).classList.remove( "disabled" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1012 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1013 document.querySelector( "#pages .del-uploaded-files" ).classList.add( "disabled" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1014 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1015 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1016
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1017 // Выбор всех картинок двойным кликом
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1018 function img_check_dblclick( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1019 let stat = ! this.checked;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1020 document.querySelectorAll( "#pages .mediateka-files-grid input[type=checkbox]" ).forEach( function( chbox ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1021 chbox.checked = stat;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1022 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1023 img_rechecked();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1024 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1025
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1026 // view in lightbox
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1027 function img_lbox() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1028 let src = this.getAttribute( "data-src" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1029 let e = src.replace( /.*\./, "" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1030 let img = [ "webp", "tiff", "jpeg", "jpg", "png", "svg", "gif", "bmp", "ico" ];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1031 let mus = [ "mp3", "ogg", "m4a", "flac" ];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1032 let vid = [ "mp4", "mkv", "webm" ];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1033 let t;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1034 if ( document.querySelector( "#lbox-window" ) == null ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1035 if ( img.indexOf( e ) >= 0 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1036 t = document.createElement( "img" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1037 } else if ( mus.indexOf( e ) >= 0 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1038 t = document.createElement( "audio" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1039 t.setAttribute( "controls", true );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1040 } else if ( vid.indexOf( e ) >= 0 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1041 t = document.createElement( "video" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1042 t.setAttribute( "controls", true );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1043 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1044 if ( t !== undefined ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1045 t.src = src;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1046 let d = document.createElement( "div" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1047 d.id = "lbox-window";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1048 d.appendChild( t );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1049 document.body.appendChild( d );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1050 d.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1051 this.remove();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1052 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1053 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1054 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1055 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1056
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1057
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1058 // Delete files
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1059 document.querySelector( "#pages .del-uploaded-files" ).addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1060 if ( ! this.classList.contains( "disabled" ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1061 let flist = [];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1062 document.querySelectorAll( "#pages .mediateka-files-grid input[type=checkbox]:checked" ).forEach( function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1063 let f = e.closest( ".file-block" ).querySelector( "img" ).getAttribute( "data-src" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1064 flist.push( f );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1065 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1066 let data = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1067 fn: "del_files",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1068 flist: flist
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1069 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1070 api( data, function( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1071 if ( r.info_text ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1072 document.querySelector( "#pages .link-file-tag" ).innerHTML = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1073 notify( r.info_text, r.info_class, r.info_time );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1074 if ( r.info_class == "info-success" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1075 for ( let f in flist ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1076 document.querySelector( `#pages .mediateka-files-grid img[data-src="${flist[f]}"]` ).parentElement.remove();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1077 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1078 document.querySelector( "#pages .del-uploaded-files" ).classList.add( "disabled" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1079 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1080 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1081 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1082 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1083 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1084
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1085 // prevent hide cursor when window resize
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1086 window.addEventListener( "resize", function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1087 if ( window.cm ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1088 let cursor = window.cm.getCursor();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1089 window.cm.scrollIntoView( { line:cursor.line, ch:cursor.ch } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1090 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1091 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1092
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1093 // show/hide tags
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1094 let tags_btn = document.querySelector( "#pages .tags-helper" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1095 if ( tags_btn ) tags_btn.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1096 document.querySelector( "#pages .page-editor-grid" ).classList.toggle( "tags-opened" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1097 cm.focus();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1098 cm.refresh();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1099 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1100
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1101 // for tags
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1102 document.querySelectorAll( "#pages .tags-grid [data-type='wrap']" ) .forEach( function( btn ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1103 btn.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1104 let otag = this.getAttribute( "data-otag" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1105 let ctag = this.getAttribute( "data-ctag" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1106 let len = this.getAttribute( "data-len" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1107 let ch = this.getAttribute( "data-ch" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1108 let line = this.getAttribute( "data-line" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1109
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1110 //wrap_selections( otag, ctag, len, line, ch );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1111 let cursor = cm.getCursor();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1112 let selections = cm.getSelections();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1113 let replacements = [];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1114 for ( let i = 0; i < selections.length; i++ ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1115 replacements[i] = otag + selections[i] + ctag;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1116 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1117 cm.replaceSelections( replacements );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1118 // Прятять панельку на мобильнике
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1119 if ( window.innerWidth < 1024 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1120 //document.querySelector( "#pages .tags-helper" ).click();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1121 let grid = this.closest( ".editor-grid" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1122 grid.classList.remove( "tags-opened" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1123 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1124 if ( selections.length < 2 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1125 if ( line ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1126 cursor.line += +line;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1127 cursor.ch = +ch;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1128 } else if ( len ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1129 cursor.ch += +len;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1130 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1131 cm.setCursor( cursor );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1132 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1133 cm.focus();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1134 cm.refresh();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1135 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1136 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1137 // for <a> tag
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1138 document.querySelectorAll( "#pages .tags-grid [data-type='wrap-a']" ) .forEach( function( btn ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1139 btn.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1140 let cursor = cm.getCursor();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1141 let selections = cm.getSelections();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1142 let replacements = [];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1143
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1144 for ( let i = 0; i < selections.length; i++ ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1145 if ( selections[i].match( /https?:\/\// ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1146 replacements[i] = `<a href="${selections[i]}" target=_blank>${selections[i]}</a>`;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1147 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1148 replacements[i] = `<a href="" target=_blank>${selections[i]}</a>`;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1149 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1150 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1151
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1152 cm.replaceSelections( replacements );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1153
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1154 if ( selections.length == 1 && selections[0] === "" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1155 cursor.ch += 9;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1156 cm.setCursor( cursor );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1157 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1158
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1159 if ( window.innerWidth < 1024 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1160 //document.querySelector( "#pages .tags-helper" ).click();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1161 let grid = this.closest( ".editor-grid" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1162 grid.classList.remove( "tags-opened" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1163 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1164
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1165 cm.focus();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1166 cm.refresh();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1167 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1168 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1169 // for tags <ul> and <ol>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1170 document.querySelectorAll( "#pages .tags-grid [data-type='wrap-list']" ) .forEach( function( btn ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1171 btn.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1172 let tag = this.getAttribute( "data-tag" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1173 let selections = cm.getSelections();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1174 let replacements = [];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1175
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1176 if ( selections.length == 1 && selections[0] === "" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1177 replacements[0] = `<${tag}>\n <li></li>\n</${tag}>`;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1178 } else if ( selections.length == 1 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1179 let lines = selections[0].split( "\n" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1180 replacements[0] = `<${tag}>\n <li>` + lines.join( "</li>\n <li>" ) + `</li>\n</${tag}>`;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1181 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1182 let n = selections.length - 1;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1183 for ( let i = 0; i <= n; i++ ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1184 replacements[i] = ` <li>${selections[i]}</li>`;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1185 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1186 replacements[0] = `<${tag}>\n` + replacements[0];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1187 replacements[n] = replacements[n] + `\n</${tag}>`;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1188 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1189
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1190 cm.replaceSelections( replacements );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1191
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1192 if ( window.innerWidth < 1024 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1193 //document.querySelector( "#pages .tags-helper" ).click();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1194 let grid = this.closest( ".editor-grid" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1195 grid.classList.remove( "tags-opened" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1196 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1197
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1198 cm.focus();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1199 cm.refresh();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1200 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1201 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1202
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1203 // fix glitches codemirror
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1204 let fix = document.querySelector( "aside a[href='#pages']" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1205 if ( fix ) fix.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1206 setTimeout( function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1207 if ( window.cm ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1208 cm.refresh();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1209 cm.focus();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1210 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1211 }, 50 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1212 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1213
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1214 // Транслитерация URL
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1215 let tr_url = document.querySelector( "#pages .page-editor-grid .url-translit" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1216 if ( tr_url ) tr_url.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1217 let url = document.querySelector( "#pages .page-editor-grid .page-properties input[name='title']" ).value;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1218 let tr_url = url_translit( url );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1219 this.previousElementSibling.value = tr_url;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1220 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1221 function url_translit( url ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1222 url = url.toLowerCase();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1223 for ( let i in cms.tr ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1224 let re = new RegExp( i, "g" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1225 url = url.replace( re, cms.tr[i] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1226 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1227 url = url.replace( / +/g, "-" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1228 url = url.replace( /[^-a-z0-9_]+/g, "" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1229 url = url.replace( /^[-_]+|[-_]+$/g, "" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1230 return url;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1231 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1232
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1233 function update_home() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1234 document.querySelectorAll( `#pages .pages-grid [data-id]` ).forEach( function( page ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1235 if ( page.querySelector( `.page-name[href="${cms.base_path}"]` ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1236 page.classList.add( "home" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1237 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1238 page.classList.remove( "home" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1239 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1240 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1241 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1242
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1243
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1244 // Замена текста на всех страницах
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1245 document.querySelectorAll( "#pages-utils .replace-btn" ).forEach( function( button ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1246 button.addEventListener( "click", function( e ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1247 let data = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1248 fn: "replace_in_pages",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1249 table: document.querySelector( "#pages-utils input[name='table']" ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1250 id_col: document.querySelector( "#pages-utils input[name='id_col']" ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1251 column: document.querySelector( "#pages-utils input[name='column']" ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1252 search_regex: document.querySelector( "#pages-utils input[name='search_regex']" ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1253 replace: document.querySelector( "#pages-utils input[name='replace']" ).value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1254 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1255 if ( data.search_regex && confirm( _( "replace_in_pages_confirm" ) ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1256 api( data, function( r ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1257 if ( r.info_text ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1258 notify( r.info_text, r.info_class, r.info_time );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1259 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1260 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1261 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1262 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1263 } );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1264
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1265 } );