Bug 30952: Staff interface redesign (header)
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / tools / additional-contents.tt
1 [% USE raw %]
2 [% USE Asset %]
3 [% USE Koha %]
4 [% USE KohaDates %]
5 [% USE Branches %]
6 [% SET footerjs = 1 %]
7 [% INCLUDE 'doc-head-open.inc' %]
8 <title>Additional contents &rsaquo; Tools &rsaquo; Koha</title>
9 [% INCLUDE 'doc-head-close.inc' %]
10 [% IF ( wysiwyg ) %]
11     [% SET editmode = "wysiwyg" %]
12 [% ELSE %]
13     [% SET editmode = "text" %]
14     [% Asset.css("lib/codemirror/codemirror.css") | $raw %]
15     [% Asset.css("lib/codemirror/lint.min.css") | $raw %]
16     <style>
17         .CodeMirror {
18             resize: vertical;
19             z-index: 0;
20         }
21     </style>
22 [% END %]
23     <style>
24         .syspref-link::before {
25             content: " | ";
26         }
27         .customisation-link::before {
28             content: " | ";
29         }
30         .customisation-link:first-child::before {
31             content: none;
32         }
33     </style>
34 </head>
35
36 <body id="tools_additional-contents" class="tools">
37 [% WRAPPER 'header.inc' %]
38     [% INCLUDE 'cat-search.inc' %]
39 [% END %]
40
41 [% WRAPPER 'sub-header.inc' %]
42 <nav id="breadcrumbs" aria-label="Breadcrumb" class="breadcrumb">
43     <ol>
44         <li>
45             <a href="/cgi-bin/koha/mainpage.pl"><i class="fa fa-home"></i></a>
46         </li>
47         <li>
48             <a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a>
49         </li>
50
51         [% IF op == 'add_form' %]
52             <li>
53                 [% IF category == 'news' %]
54                     <a href="/cgi-bin/koha/tools/additional-contents.pl?category=news">News</a>
55                 [% ELSIF category == 'pages' %]
56                     <a href="/cgi-bin/koha/tools/additional-contents.pl?category=pages">Pages</a>
57                 [% ELSE %]
58                     <a href="/cgi-bin/koha/tools/additional-contents.pl?category=html_customizations">HTML customizations</a>
59                 [% END %]
60             </li>
61             <li>
62                 <a href="#" aria-current="page">
63                     [% IF additional_content.idnew %]
64                         <span>Modify additional content</span>
65                     [% ELSE %]
66                         <span>Add additional content</span>
67                     [% END %]
68                     ([% IF category == 'news' %]<span>News</span>[% ELSIF category == 'pages' %]<span>Pages</span>[% ELSE %]<span>HTML customizations</span>[% END %])
69                 </a>
70             </li>
71         [% ELSE %]
72             <li>
73                 <a href="#" aria-current="page">
74                     [% IF category == 'news' %]
75                         News
76                     [% ELSIF category == 'pages' %]
77                         Pages
78                     [% ELSE %]
79                         HTML customizations
80                     [% END %]
81                 </a>
82             </li>
83         [% END %]
84
85     </ol>
86 </nav>
87 [% END %]
88
89 [% IF op == 'add_form' %]
90 <div class="main container-fluid">
91     <div class="row">
92         <div class="col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2">
93 [% ELSE %]
94 <div class="main container-fluid">
95     <div class="row">
96         <div class="col-sm-10 col-sm-push-2">
97 [% END %]
98
99 <main>
100
101     [% FOR m IN messages %]
102         <div class="dialog [% m.type | html %]">
103             [% SWITCH m.code %]
104             [% CASE 'error_on_update' %]
105                 <span>An error occurred when updating this content. Perhaps it already exists</span>
106             [% CASE 'error_on_insert' %]
107                 <span>An error occurred when adding this content. Check the logs</span>
108             [% CASE 'error_on_delete' %]
109                 <span>An error occurred when deleting this content. Check the logs</span>
110             [% CASE 'success_on_update' %]
111                 <span>Content updated successfully</span>
112             [% CASE 'success_on_insert' %]
113                 <span>Content added successfully</span>
114             [% CASE 'success_on_delete' %]
115                 <span>Content deleted successfully</span>
116             [% CASE %]
117                 <span>[% m.code | html %]</span>
118             [% END %]
119         </div>
120     [% END %]
121
122     [% IF op == 'add_form' %]
123         [% PROCESS add_form %]
124     [% ELSE %]
125         [% PROCESS list %]
126     [% END %]
127
128 </main>
129
130         [% IF op != 'add_form' %]
131             </div> <!-- /.col-sm-10.col-sm-push-2 -->
132
133             <div class="col-sm-2 col-sm-pull-10">
134                 <aside>
135
136                     <div id="news-filter">
137                         <form action="/cgi-bin/koha/tools/additional-contents.pl" method="get">
138                             <h4>Filter</h4>
139                             <fieldset class="brief">
140                                 <ol>
141                                     <li>
142                                         <label for="news_keyword">Keyword:</label>
143                                         <input type="text" name="news_keyword" id="news_keyword" />
144                                     </li>
145                                     <li>
146                                         <label for="news_display_location">Display location:</label>
147                                         <select name="news_display_location" id="news_display_location">
148                                             <option value="">All</option>
149                                             [% PROCESS locations_options category => category %]
150                                         </select>
151                                     </li>
152                                     <li>
153                                         <label for="news_library">Library: </label>
154                                         <select id="news_library" name="news_library">
155                                             <option value=""></option>
156                                             <option value="">All libraries</option>
157                                             [% PROCESS options_for_libraries libraries => Branches.all( selected => branchcode, unfiltered => 1, ) %]
158                                         </select>
159                                     </li>
160                                     <li>
161                                         <label>
162                                             <input type="checkbox" name="show_expired" id="show_expired" /> Show expired
163                                         </label>
164                                     </li>
165                                 </ol>
166                             </fieldset>
167                         </form>
168                     </div>
169
170                     [% INCLUDE 'tools-menu.inc' %]
171                 </aside>
172             </div> <!-- /.col-sm-2.col-sm-pull-10 -->
173         [% END %]
174     </div> <!-- /.row -->
175 </div> <!-- /.main.container-fluid -->
176
177 [% BLOCK add_form %]
178     [% IF additional_content %]
179         <h1>Modify an additional content</h1>
180     [% ELSE %]
181         <h1>New additional content ([% IF category == 'news' %]News[% ELSIF category == 'pages' %]Pages[% ELSE %]HTML customizations[% END %])</h1>
182     [% END %]
183
184     <div id="toolbar" class="btn-toolbar">
185         <div class="btn-group">
186             <button class="btn btn-default" id="submit_form"><i class="fa fa-save"></i> Save</button>
187             <button class="btn btn-default dropdown-toggle" data-toggle="dropdown">
188             <span class="caret"></span>
189             </button>
190             <ul class="dropdown-menu">
191                 <li><a id="saveandcontinue" href="#">Save and continue editing</a></li>
192             </ul>
193         </div>
194         [% IF category == 'news' %]
195             <a class="btn btn-default cancel" href="/cgi-bin/koha/tools/additional-contents.pl"><i class="fa fa-remove"></i> Cancel</a>
196         [% ELSIF category == 'pages' %]
197             <a class="btn btn-default cancel" href="/cgi-bin/koha/tools/additional-contents.pl?category=pages"><i class="fa fa-remove"></i> Cancel</a>
198         [% ELSE %]
199             <a class="btn btn-default cancel" href="/cgi-bin/koha/tools/additional-contents.pl?category=html_customizations"><i class="fa fa-remove"></i> Cancel</a>
200         [% END %]
201     </div>
202
203     <form id="add_additional_content" method="post" action="/cgi-bin/koha/tools/additional-contents.pl" class="validate">
204         <input type="hidden" name="op" value="add_validate" />
205         <input type="hidden" name="category" value="[% category | html %]" />
206         <input type="hidden" name="code" value="[% additional_content.code | html %]" />
207         <input type="hidden" name="idnew" value="[% additional_content.idnew | html %]" />
208         <input type="hidden" id="redirect" name="redirect" value="" />
209         <input type="hidden" id="editmode" name="editmode" value="[% editmode | html %]" />
210         <fieldset class="rows">
211             <ol>
212                 <li>
213                     <label for="location">Display location:</label>
214                     <select id="location" name="location">
215                         [% PROCESS locations_options location => additional_content.location %]
216                     </select>
217                 </li>
218                 <li>
219                     <label for="branchcode">Library: </label>
220                     <select id="branchcode" name="branchcode">
221                         [% IF additional_content.branchcode == '' %]
222                             <option value="" selected="selected">All libraries</option>
223                         [% ELSE %]
224                             <option value="">All libraries</option>
225                         [% END %]
226                         [% PROCESS options_for_libraries libraries => Branches.all( selected => additional_content.branchcode, unfiltered => 1, ) %]
227                     </select>
228                 </li>
229                 [% UNLESS languages.size %]
230                     <li>
231                         [% IF category == 'news' %]
232                             <label for="title" class="required">Title: </label>
233                             <input id="title" size="100" maxlength="250" type="text" name="title_default" value="[% additional_content.title | html %]" required="required" class="required" /> <span class="required">Required</span>
234                         [% ELSE %]
235                             <label for="title">Title: </label>
236                             <input id="title" size="100" maxlength="250" type="text" name="title_default" value="[% additional_content.title | html %]" />
237                         [% END %]
238                     </li>
239                 [% END %]
240                 <li>
241                     <label for="from">Publication date: </label>
242                     <input id="from" type="text" name="published_on" size="15" value="[% additional_content.published_on | html %]" class="flatpickr" data-date_to="to" />
243                     <div class="hint">[% INCLUDE 'date-format.inc' %]</div>
244                 </li>
245                 <li>
246                     <label for="to">Expiration date: </label>
247                     <input id="to" type="text" name="expirationdate" size="15" value="[% additional_content.expirationdate | html %]" class="flatpickr" />
248                     <div class="hint">
249                         [% INCLUDE 'date-format.inc' %]
250                         [% IF category == 'news' %]
251                             <br>News will still be accessible by direct URL if expired.
252                         [% END %]
253                     </div>
254                 </li>
255                 <li>
256                     <label for="number">Appear in position: </label>
257                     [% IF ( additional_content.number ) %]
258                         <input id="number" size="3" name="number" type="text" value="[% additional_content.number | html %]" />
259                     [% ELSE %]
260                         <input id="number" size="3" name="number" type="text" />
261                     [% END %]
262                 </li>
263             </ol>
264         </fieldset>
265
266         [% IF languages.size %]
267             <div id="tabs" class="toptabs">
268                 <ul class="nav nav-tabs" role="tablist">
269                     [% FOR language IN languages %]
270                         [% IF language.lang == 'default' %]
271                             <li role="presentation"><a href="#lang_default" aria-controls="lang_default" role="tab" data-toggle="tab">Default</a></li>
272                         [% ELSE %]
273                             <li role="presentation"><a href="#lang_[% language.lang | uri %]" aria-controls="lang_[% language.lang | uri %]" role="tab" data-toggle="tab">[% language.description | html %]</a></li>
274                         [% END %]
275                     [% END %]
276                 </ul>
277                 <div class="tab-content">
278                     [% FOR language IN languages %]
279                         <div id="lang_[% language.lang | uri %]" class="lang clearfix tab-pane" data-lang="[% language.description | html %]">
280                             <fieldset class="rows">
281                                 <ol>
282                                     <li>
283                                         <label for="title_[% language.lang | html %]">Title: </label>
284                                         <input id="title_[% language.lang| html %]" size="100" maxlength="250" type="text" name="title_[% language.lang | html %]" value="[% translated_contents.item(language.lang).title | html %]">
285                                     </li>
286                                     <li>
287                                         <label for="content_[% language.lang | html %]">Content: </label>
288                                         <textarea name="content_[% language.lang | html %]" id="content_[% language.lang | html %]" data-lang="[% language.lang | html%]" cols="75" rows="10">[% translated_contents.item(language.lang).content | html %]</textarea>
289                                         <input type="hidden" name="lang" value="[% language.lang | html %]" />
290                                     </li>
291                                 </ol>
292                             </fieldset>
293                         </div>
294                     [% END %]
295                 </div> <!-- /.tab-content -->
296             </div>
297         [% ELSE %]
298             <div id="lang_default">
299                 <div class="clearfix">
300                     <textarea name="content" id="content_default" data-lang="[% language.lang | html %]"  cols="75" rows="10">[% additional_content.content | html %]</textarea>
301                 </div>
302             </div>
303         [% END %]
304     </form>
305 [% END %]
306
307 [% BLOCK list %]
308
309     <div id="toolbar" class="btn-toolbar">
310         <div class="btn-group">
311             <a href="/cgi-bin/koha/tools/additional-contents.pl?op=add_form&category=[% category | uri %]&editmode=[% editmode | uri %]" class="btn btn-default" id="newentry"> <i class="fa fa-plus"></i> New entry</a><button class="btn btn-default dropdown-toggle" data-toggle="dropdown">
312                 <span class="caret"></span>
313             </button>
314             <ul class="dropdown-menu pull-right">
315                 <li>
316                     [% IF ( wysiwyg ) %]
317                         <a href="/cgi-bin/koha/tools/additional-contents.pl?op=add_form&category=[% category | uri %]&editmode=text">New entry using text editor</a>
318                     [% ELSE %]
319                         <a href="/cgi-bin/koha/tools/additional-contents.pl?op=add_form&category=[% category | uri %]&editmode=wysiwyg">New entry using WYSIWYG editor</a>
320                     [% END %]
321                 </li>
322             </ul>
323         </div>
324     </div>
325
326     <h2>Additional contents ([% IF category == 'news' %]News[% ELSIF category == 'pages' %]Pages[% ELSE %]HTML customizations[% END %])</h2>
327     <span id="additional_contents_links">
328         See
329         <a class="customisation-link" href="/cgi-bin/koha/tools/additional-contents.pl?category=news">News</a>
330         <a class="customisation-link" href="/cgi-bin/koha/tools/additional-contents.pl?category=html_customizations">HTML customizations</a>
331         <a class="customisation-link" href="/cgi-bin/koha/tools/additional-contents.pl?category=pages">Pages</a>
332         [% IF ( CAN_user_parameters_manage_sysprefs ) %]
333             <a class="syspref-link" href='/cgi-bin/koha/admin/preferences.pl?op=search&searchfield=OPACUserJS'>OPACUserJS</a>
334             <a class="syspref-link" href='/cgi-bin/koha/admin/preferences.pl?op=search&searchfield=OPACUserCSS'>OPACUserCSS</a>
335         [% END %]
336     </span>
337
338     [% IF additional_contents.count %]
339         <form id="del_form" method="post" action="/cgi-bin/koha/tools/additional-contents.pl">
340             <table id="table_additional_contents">
341                 <thead>
342                     <tr>
343                         <th class="NoSort">&nbsp;</th>
344                         <th>Location</th>
345                         <th>Library</th>
346                         <th>Number</th>
347                         <th>Publication date</th>
348                         <th>Expiration date</th>
349                         <th class="anti-the">Title</th>
350                         <th>Author</th>
351                         [% IF category == 'pages' %]
352                             <th>Page URL</th>
353                             <th class="anti-the">Page</th>
354                         [% ELSE %]
355                             <th class="anti-the">News</th>
356                         [% END %]
357                         <th class="NoSort noExport">Actions</th>
358                     </tr>
359                 </thead>
360                 <tbody>
361                     [% FOREACH c IN additional_contents%]
362                         [% IF ( c.is_expired ) %]<tr class="expired">[% ELSE %]<tr>[% END %]
363                         <td>
364                             <input type="checkbox" name="ids" value="[% c.idnew | html %]" />
365                         </td>
366                         <td>
367                             [% IF c.category == 'news' || c.category == 'pages' %]
368                                 [% IF c.location == 'staff_and_opac' %]<span>All</span>
369                                 [% ELSIF c.location == 'staff_only' %]<span>Librarian interface</span>
370                                 [% ELSIF c.location == 'opac_only' %]<span>OPAC</span>
371                                 [% ELSIF c.location == 'slip' %]<span>Slip</span>
372                                 [% ELSE %]<span>Unknown ('[% location | html %]')</span>
373                                 [% END %]
374                             [% ELSE %]
375                                 [% c.location | html %]
376                             [% END %]
377                         </td>
378                         <td>
379                             [% IF ( c.branchcode == "" ) -%]
380                             All libraries
381                             [% ELSE %][% c.library.branchname | html %]
382                             [% END %]
383                         </td>
384                         <td>[% c.number | html %]</td>
385                         <td data-order="[% c.published_on | html %]">[% c.published_on | $KohaDates %]</td>
386                         <td data-order="[% c.expirationdate | html %]">[% c.expirationdate | $KohaDates %] [% IF ( c.is_expired ) %](<span class="expired">expired</span>)[% END %]</td>
387                         <td>[% c.title | html %]</td>
388                         <td>[% IF ( c.author) %][% INCLUDE 'patron-title.inc' patron=c.author %][% END %]</td>
389                         [% IF category == 'pages' %]
390                             <td class="actions">
391                                 [% IF c.location == 'opac_only' OR c.location == 'staff_and_opac' %]
392                                     <strong>OPAC</strong>:
393                                     <a target="_blank" href="[% Koha.Preference('OPACBaseURL') | url %]/cgi-bin/koha/opac-page.pl?page_id=[% c.idnew | url %]" title="View on OPAC">Default</a>
394                                     OR
395                                     <a target="_blank" href="[% Koha.Preference('OPACBaseURL') | url %]/cgi-bin/koha/opac-page.pl?code=[% c.code | url %]" title="View on OPAC">Current language</a>
396                                 [% END %]
397                                 [% IF c.location == 'staff_only' OR c.location == 'staff_and_opac' %]
398                                     [% IF c.location == 'staff_and_opac' %]<br/>[% END %]
399                                     <strong>Librarian interface</strong>:
400                                     <a href="/cgi-bin/koha/tools/page.pl?page_id=[% c.idnew | url %]" title="View on librarian interface">Default</a>
401                                     OR
402                                     <a href="/cgi-bin/koha/tools/page.pl?code=[% c.code | url %]" title="View on librarian interface">Current language</a>
403                                 [% END %]
404                             </td>
405                         [% END %]
406                         <td>
407                             <div class="btn-group">
408                                 <a class="preview_news btn btn-default btn-xs" data-number="[% loop.count | html %]"><i class="fa fa-eye" aria-hidden="true"></i> Preview content</a>
409                             </div>
410                             <div id="contentModal[% loop.count | html %]" class="modal" tabindex="-1" role="dialog" data-number="[% loop.count | html %]">
411                                 <div class="modal-dialog" role="document">
412                                     <div class="modal-content modal-lg">
413                                         <div class="modal-header">
414                                             <h5 class="modal-title">Preview of: "[% c.title | html %]"</h5>
415                                         </div>
416                                     <div class="modal-body">
417                                         [% c.content | $raw %]
418                                     </div>
419                                     <div class="modal-footer">
420                                         <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
421                                     </div>
422                                 </div>
423                             </div>
424                         </td>
425                         <td class="actions">
426                             <div class="btn-group dropup">
427                                 <a href="/cgi-bin/koha/tools/additional-contents.pl?op=add_form&amp;id=[% c.idnew | uri %]&editmode=[% editmode | uri %]" class="btn btn-default btn-xs"> <i class="fa fa-pencil"></i> Edit</a><button class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown">
428                                     <span class="caret"></span>
429                                 </button>
430                                 <ul class="dropdown-menu pull-right">
431                                     <li>
432                                         [% IF ( wysiwyg ) %]
433                                             <a href="/cgi-bin/koha/tools/additional-contents.pl?op=add_form&amp;id=[% c.idnew | uri %]&editmode=text"><i class="fa fa-pencil"></i> Edit with text editor</a>
434                                         [% ELSE %]
435                                             <a href="/cgi-bin/koha/tools/additional-contents.pl?op=add_form&amp;id=[% c.idnew | uri %]&editmode=wysiwyg"><i class="fa fa-pencil"></i> Edit with WYSIWYG editor</a>
436                                         [% END %]
437                                     </li>
438                                 </ul>
439                             </div>
440                             <div class="btn-group">
441                                 <a href="#" class="delete_news btn btn-default btn-xs" data-idnew="[% c.idnew | html %]"><i class="fa fa-trash"></i> Delete</a>
442                             </div>
443                         </td>
444                     </tr>
445                     [% END %]
446                 </tbody>
447             </table>
448             <input type="hidden" name="op" value="delete_confirmed" />
449             <input type="hidden" name="category" value="[% category | html %]" />
450             <fieldset class="action"><input type="submit" class="button" value="Delete selected" /></fieldset>
451         </form>
452         <form action="/cgi-bin/koha/tools/additional-contents.pl" method="post" id="delete_single">
453             <input type="hidden" id="del_op" name="op" value="delete_confirmed" />
454             <input type="hidden" id="del_category" name="category" value="[% category | html %]" />
455             <input type="hidden" id="del_ids" name="ids" />
456         </form>
457     [% ELSE %]
458         <div class="dialog message">There are no additional contents.</div>
459     [% END %]
460 [% END %]
461
462 [% BLOCK locations_options %]
463     [% IF category == 'news' || category == 'pages' %]
464         [% IF location == "staff_and_opac" %]
465             <option value="staff_and_opac" selected="selected">Librarian and OPAC interfaces</option>
466         [% ELSE %]
467             <option value="staff_and_opac">Librarian and OPAC interfaces</option>
468         [% END %]
469
470         [% IF location == "staff_only" %]
471             <option value="staff_only" selected="selected">Librarian interface</option>
472         [% ELSE %]
473             <option value="staff_only">Librarian interface</option>
474         [% END %]
475
476         [% IF location == "opac_only" %]
477             <option value="opac_only" selected="selected">OPAC</option>
478         [% ELSE %]
479             <option value="opac_only">OPAC</option>
480         [% END %]
481
482         [% UNLESS category == 'pages' %]
483             [% IF location == "slip" %]
484                 <option value="slip" selected="selected">Slip</option>
485             [% ELSE %]
486                 <option value="slip">Slip</option>
487             [% END %]
488         [% END %]
489     [% ELSE %]
490         [% SET available_options = [ 'OpacNavRight', 'opacheader', 'OpacCustomSearch', 'OpacMainUserBlock', 'opaccredits', 'OpacLoginInstructions', 'OpacNav', 'OpacNavBottom', 'OpacSuggestionInstructions', 'ArticleRequestsDisclaimerText', 'OpacMoreSearches', 'OpacMySummaryNote', 'OpacLibraryInfo' ] %]
491         [% FOREACH l IN available_options.sort %]
492             [% IF l == location %]
493                 <option value="[% l | html %]" selected="selected">[% l | html %]</option>
494             [% ELSE %]
495                 <option value="[% l | html %]">[% l | html %]</option>
496             [% END %]
497         [% END %]
498     [% END %]
499 [% END %]
500
501 [% MACRO jsinclude BLOCK %]
502     [% INCLUDE 'calendar.inc' %]
503     [% Asset.js("js/tools-menu.js") | $raw %]
504     [% Asset.js("lib/hc-sticky.js") | $raw %]
505     <script>
506         $("#saveandcontinue").on("click",function(e){
507             e.preventDefault();
508             $("#redirect").val("just_save");
509             $("#submit_form").click();
510         });
511     </script>
512     [% IF additional_contents.count %]
513         [% INCLUDE 'datatables.inc' %]
514         <script>
515             $('.preview_news').click( function() {
516                 modalNumber = $(this).attr('data-number');
517                 $('.modal[data-number="'+modalNumber+'"]').modal('show');
518             })
519             function Checkbox(){
520                 var form = document.getElementById('del_form');
521                 var inputs = form.getElementsByTagName('input');
522                 var checked = false;
523                 for (var i=0; i<inputs.length; i++) {
524                     if (inputs[i].type == 'checkbox' && inputs[i].name == 'ids') {
525                         checked = inputs[i].checked;
526                         if (checked) return true;
527                     }
528                 }
529             }
530
531             function filterDataTable( table, column, term ){
532                 if( column ){
533                     table.column( column ).search( term ).draw();
534                 } else {
535                     table.search( term ).draw();
536                 }
537                 clearFilter( term );
538             }
539
540             function clearFilter( term ){
541                 if( term == "" ){
542                     $(".dt_button_clear_filter").addClass("disabled");
543                 } else {
544                     $(".dt_button_clear_filter").removeClass("disabled");
545                 }
546             }
547
548             /* Custom table search configuration: If a table row
549                has an "expired" class, hide it UNLESS the
550                show_expired checkbox is checked */
551             $.fn.dataTable.ext.search.push(
552                 function( settings, searchData, index, rowData, counter ) {
553                     var row = $(settings.aoData[index].nTr);
554                     if( row.hasClass("expired") && !$("#show_expired").prop("checked") ){
555                         return false;
556                     } else {
557                         return true;
558                     }
559                 }
560             );
561
562             $(document).ready(function() {
563
564                 var table = $("#table_additional_contents").DataTable($.extend(true, {}, dataTablesDefaults, {
565                     "order": [[ 4, "desc" ]],
566                     "aoColumnDefs": [
567                         { "sortable": false, "searchable": false, 'targets': [ 'NoSort' ] },
568                         { "type": "anti-the", "targets": [ "anti-the" ] }
569                     ],
570                     "sPaginationType": "full_numbers"
571                 }));
572
573                 $("#del_form").on("click", ".delete_news", function(e){
574                     e.preventDefault();
575                     if( confirmDelete( _("Are you sure you want to delete this content? This cannot be undone.") ) ){
576                         $("#del_ids").val( $(this).data("idnew") );
577                         $("#delete_single").submit();
578                     }
579                 });
580
581                 $("#del_form").on("submit",function(){
582                     if ( Checkbox() ) {
583                         return confirmDelete( _("Are you sure you want to delete the selected content?") );
584                     } else {
585                         alert(_("Please select content to delete."));
586                         return false;
587                     }
588                 });
589
590                 $("#show_expired").on("change", function(){
591                     /* redraw the DataTable according to the custom search function */
592                     table.draw();
593                 });
594
595                 table.on( 'search.dt', function () {
596                     var term = table.search();
597                     $("#news_keyword").val( term );
598                 });
599
600                 $("#news_keyword").on("keyup", function(){
601                     var term = $(this).val();
602                     filterDataTable( table, null, term );
603                 });
604
605                 $("#news_display_location").on("change", function(){
606                     var term = $(this).val();
607                     filterDataTable( table, 1, term );
608                 });
609
610                 $("#news_library").on("change", function(){
611                     // Table must be filtered by the <option>'s text, not its value
612                     var opt = $(this).find("option:selected").text();
613                     filterDataTable( table, 2, opt );
614                 });
615
616                 $(".dt_button_clear_filter").on("click", function(){
617                     table.search('').columns().search('').draw();
618                     $("#news-filter select").each(function(){
619                         $(this).val("");
620                     });
621                 });
622             });
623         </script>
624     [% ELSE %]
625         <script>
626             $(document).ready(function() {
627                 [% IF category == 'news' %]
628                 $("#add_additional_content").validate({
629                     submitHandler: function(form){
630                         if ( ! $("#title_default").val().length > 0 ) {
631                             alert(_("Please specify a title for 'Default'"));
632                             return false;
633                         }
634                         else {
635                             [% UNLESS wysiwyg %]
636                                 let content = $('#content_default').siblings(".CodeMirror")[0].CodeMirror.getValue();
637                             [% ELSE %]
638                                 let content = tinyMCE.get('content_default').getContent();
639                             [% END %]
640
641                             if ( ! content.length > 0 ) {
642                                 alert(__("Please specify a content for 'Default'"));
643                                 return false;
644                             }
645                         }
646
647                         form.submit();
648                     }
649                 });
650                 [% END %]
651
652                 $("#submit_form").on("click",function(){
653                     $("#add_additional_content").submit();
654                 });
655
656                 Sticky = $("#toolbar");
657                 Sticky.hcSticky({
658                     stickTo: ".main",
659                     stickyClass: "floating"
660                 });
661
662             });
663         </script>
664     [% END %]
665     [% UNLESS ( wysiwyg ) %]
666         [% Asset.js( "lib/codemirror/codemirror.min.js" ) | $raw %]
667         [% Asset.js( "lib/codemirror/xml.min.js" ) | $raw %]
668         [% Asset.js( "lib/codemirror/lint.min.js" ) | $raw %]
669         [% Asset.js( "lib/linters/htmlhint.min.js" ) | $raw %]
670         [% Asset.js( "lib/codemirror/html-lint.min.js" ) | $raw %]
671         <script>
672             let editors = new Object(); /* Keeps track of initialized CodeMirror instances */
673             $(document).ready(function(){
674
675                 if( $("#tabs .tab-pane.active").length < 1 ){
676                     /* Activate first tab and initialize its CodeMirror instance */
677                     let firstTab = $("#tabs a:first");
678                     firstTab.tab("show");
679                     initCodeMirror( firstTab[0].hash );
680                 }
681
682                 $("#tabs a[data-toggle='tab']").on("shown.bs.tab", function (e) {
683                     /* Try to initialize CodeMirror instance when tab opens */
684                     initCodeMirror( e.target.hash );
685                 });
686             });
687
688             function initCodeMirror( container ){
689                 /* Initialize CodeMirror instance only if it doesn't exist */
690                 if( !editors[ container ] ){
691                     let textarea = $( container ).find("textarea[name^='content_']");
692                     let this_lang = textarea.attr('data-lang');
693                     let editor = CodeMirror.fromTextArea( document.getElementById('content_' + this_lang), {
694                         lineNumbers: true,
695                         lineWrapping: true,
696                         lint: true,
697                         mode: "text/html",
698                         gutters: ["CodeMirror-lint-markers"],
699                         viewportMargin: Infinity,
700                     });
701                     editors[ container ] = editor;
702                     return editor;
703                 }
704             }
705         </script>
706     [% ELSE %]
707         [% Asset.js("lib/tiny_mce/tinymce.min.js") | $raw %]
708         [% INCLUDE 'str/tinymce_i18n.inc' %]
709         <script>
710
711             $(document).ready(function(){
712                 if( $("#tabs .tab-pane.active").length < 1 ){
713                     /* Activate first tab and initialize its tinyMCE instance */
714                     let firstTab = $("#tabs a:first");
715                     firstTab.tab("show");
716                     initTinyMce( firstTab[0].hash );
717                 }
718
719                 $("#tabs a[data-toggle='tab']").on("shown.bs.tab", function (e) {
720                     /* Try to initialize tinyMCE instance when tab opens */
721                     initTinyMce( e.target.hash );
722                 });
723             });
724
725             function initTinyMce( container ){
726                 let textarea = $( container ).find("textarea[name^='content_']");
727                 /* TinyMCE seems to do its own check to prevent double-initialization
728                    so We don't need to keep track of it */
729                 let editor = tinyMCE.init({
730                     branding : false,
731                     block_unsupported_drop : false,
732                     content_css : "[% interface | html %]/[% theme | html %]/css/tinymce.css",
733                     custom_elements:"style,link,~link",
734                     extended_valid_elements:"style,link[href|rel]",
735                     force_br_newlines : false,
736                     force_p_newlines : false,
737                     forced_root_block : '',
738                     menubar : "file edit view insert format tools table",
739                     plugins : "autoresize table hr link image charmap lists code emoticons",
740                     relative_urls : false,
741                     selector: "#" + textarea[0].id,
742                     verify_html: false,
743                     toolbar : [
744                         "formatselect | bold italic | cut copy paste | alignleft aligncenter alignright | outdent indent | image link unlink anchor cleanup hr",
745                         "table | bullist numlist | undo redo | removeformat | emoticons charmap | forecolor backcolor | code"
746                     ],
747                 });
748                 return editor;
749             }
750         </script>
751     [% END # /UNLESS wysiwyg %]
752 [% END %]
753
754 [% INCLUDE 'intranet-bottom.inc' %]