/* $Id$ */ /* # Copyright (c) 2003-2005, Jannis Hermanns (on behalf the Serendipity Developer Team) # All rights reserved. See LICENSE file for licensing details */ // usage: log('inside coolFunc', this, arguments); // paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/ window.log = function f(){ log.history = log.history || []; log.history.push(arguments); if(this.console) { var args = arguments, newarr; try { args.callee = f.caller } catch(e) {}; newarr = [].slice.call(args); if (typeof console.log === 'object') log.apply.call(console.log, console, newarr); else console.log.apply(console, newarr);}}; // make it safe to use console.log always (function(a){ function b() { } for(var c="assert,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profileEnd,time,timeEnd,trace,warn".split(","),d;!!(d=c.pop());) { a[d]=a[d]||b; } } ) (function() { try { console.log();return window.console; } catch(a) { return (window.console= { } ); } } ()); // Fires functions which are generated dynamically in backend PHP files // (i.e. include/functions_entries_admin.inc.php) which load the various // WYSIWYG editors in entries editor, HTML nuggets etc. function spawn() { if (self.Spawnextended) { Spawnextended(); } if (self.Spawnbody) { Spawnbody(); } if (self.Spawnnugget) { Spawnnugget(); } } // Generic function to set cookies function SetCookie(name, value) { var today = new Date(); var expire = new Date(); expire.setTime(today.getTime() + (60*60*24*30*1000)); document.cookie = 'serendipity[' + name + ']='+escape(value) + ';expires=' + expire.toGMTString(); } // Some sort of onload wrapper? @onli says jQuery can help with this function addLoadEvent(func) { var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func; } else { window.onload = function() { oldonload(); func(); } } } /** * Based upon code written by chris wetherell * http://www.massless.org * chris [THE AT SIGN] massless.org */ // Returns "position" of selection in textarea // Used internally by wrapSelectionWithLink() function getSelection($txtarea) { var start = $txtarea[0].selectionStart; var end = $txtarea[0].selectionEnd; return $txtarea.val().substring(start, end); } // Used by non-wysiwyg editor toolbar buttons to wrap selection // in a element associated with toolbar button function wrapSelection(txtarea, openTag, closeTag) { scrollPos = false; if (txtarea.scrollTop) { scrollPos = txtarea.scrollTop; } // http://stackoverflow.com/questions/1712417/jquery-wrap-selected-text-in-a-textarea var $txtarea = $(txtarea); var len = $txtarea.val().length; var start = $txtarea[0].selectionStart; var end = $txtarea[0].selectionEnd; var selectedText = $txtarea.val().substring(start, end); var replacement = openTag + selectedText + closeTag; $txtarea.val($txtarea.val().substring(0, start) + replacement + $txtarea.val().substring(end, len)); $txtarea[0].selectionStart = start + replacement.length $txtarea[0].selectionEnd = start + replacement.length if (scrollPos) { txtarea.focus(); txtarea.scrollTop = scrollPos; } } // Used by non-wysiwyg editor toolbar buttons to wrap selection // in element (only) function wrapSelectionWithLink(txtarea) { var my_link = prompt("Enter URL:","http://"); if (getSelection($(txtarea) ) == "") { var my_desc = prompt("Enter Description", ''); } var my_title = prompt("Enter title/tooltip:", ""); html_title = ""; if (my_title != "" && my_title != null) { html_title = ' title="' + my_title + '"'; } if (my_link != null) { lft = ""; if (my_desc != null && my_desc != "") { rgt = my_desc + ""; } else { rgt = ""; } wrapSelection(txtarea, lft, rgt); } return; } /* end chris w. script */ // Adds img element to selected text // Used internally by wrapInsImage() function insertText(txtarea, str) { $txtarea = $(txtarea); var selLength = $txtarea.val().length; var selStart = $txtarea[0].selectionStart; var selEnd = $txtarea[0].selectionEnd; if (selEnd==1 || selEnd==2) { selEnd=selLength; } var before = $txtarea.val().substring(0,selStart); var after = $txtarea.val().substring(selStart); $txtarea.val(before + str + after); $txtarea[0].selectionStart = selStart + str.length $txtarea[0].selectionEnd = selStart + str.length } // Used by non-wysiwyg editor toolbar buttons to wrap selection // in element (only); doesn't really "wrap", merely inserts // an element before selected text function wrapInsImage(txtarea) { var loc = prompt('Enter the Image Location: '); if (loc) { insertText(txtarea,''); } } /* end Better-Editor functions */ // Switches preview of image selected from media db by changing the // container's background image function change_preview(id) { var text_box = document.getElementById('serendipity[template][' + id + ']'); var image_box = document.getElementById(id + '_preview'); var filename = text_box.value; image_box.style.backgroundImage = 'url(' + filename + ')'; image_box.style.backgroundRepeat = 'no-repeat'; } // Opens media db image selection in new window function choose_media(id) { window.open('serendipity_admin_image_selector.php?serendipity[htmltarget]=' + id + '&serendipity[filename_only]=true', 'ImageSel', 'width=800,height=600,toolbar=no,scrollbars=1,scrollbars,resize=1,resizable=1'); } // "Transfer" value from media db popup to form element, used for example for selecting a category-icon function serendipity_imageSelector_addToElement (str, id) { var $input = $('#'+id); $input.val(str); if ($input.attr('type') != 'hidden') { $input.focus(); // IE would generate an error when focusing an hidden element } // calling the change-event for doing stuff like generating the preview-image $input.change(); } // Add another (image) keyword function AddKeyword(keyword) { s = document.getElementById('keyword_input').value; document.getElementById('keyword_input').value = (s != '' ? s + ';' : '') + keyword; } // "Transfer" value from media db popup to textarea, including wysiwyg // This gets textarea="body"/"extended" and tries to insert into the textarea // named serendipity[body]/serendipity[extended] function serendipity_imageSelector_addToBody (str, textarea) { var oEditor; if (typeof(FCKeditorAPI) != 'undefined') { oEditor = FCKeditorAPI.GetInstance('serendipity[' + textarea + ']') ; if (oEditor.EditMode == FCK_EDITMODE_WYSIWYG) { oEditor.InsertHtml(str); return; } } else if(typeof(xinha_editors) != 'undefined') { if (typeof(xinha_editors['serendipity[' + textarea + ']']) != 'undefined') { oEditor = xinha_editors['serendipity['+ textarea +']']; } if (oEditor) { oEditor.insertHTML(str); return; } } else if(typeof(HTMLArea) != 'undefined') { if (textarea == 'body' && typeof(editorbody) != 'undefined') { oEditor = editorbody; } else if (textarea == 'extended' && typeof(editorextended) != 'undefined') { oEditor = editorextended; } else if (typeof(htmlarea_editors) != 'undefined' && typeof(htmlarea_editors[textarea]) != 'undefined') { oEditor = htmlarea_editors[textarea]; } if (oEditor._editMode != 'textmode') { oEditor.insertHTML(str); return; } } else if(typeof(TinyMCE) != 'undefined') { // for the TinyMCE editor we do not have a text mode insert tinyMCE.execInstanceCommand('serendipity[' + textarea + ']', 'mceInsertContent', false, str); return; } noWysiwygAdd(str, textarea); } // The noWysiwygAdd JS function is the vanila serendipity_imageSelector_addToBody js function // which works fine in NO WYSIWYG mode // NOTE: the serendipity_imageSelector_addToBody could add any valid HTML string to the textarea function noWysiwygAdd( str, textarea ) { wrapSelection($('textarea[name="serendipity['+textarea+']"]'), str, ''); } // Inserting media db img markup including s9y-specific container markup function serendipity_imageSelector_done(textarea) { var insert = ''; var img = ''; var src = ''; var alt = ''; var title = ''; var f = document.forms['serendipity[selForm]'].elements; img = f['imgName'].value; var imgWidth = f['imgWidth'].value; var imgHeight = f['imgHeight'].value; if (f['serendipity[linkThumbnail]'] && f['serendipity[linkThumbnail]'][0].checked == true) { img = f['thumbName'].value; imgWidth = f['imgThumbWidth'].value; imgHeight = f['imgThumbHeight'].value; } if (f['serendipity[filename_only]']) { // this part is used when selecting only the image without further markup (-> category-icon) var starget = f['serendipity[htmltarget]'] ? f['serendipity[htmltarget]'].value : 'serendipity[' + textarea + ']'; switch(f['serendipity[filename_only]'].value) { case 'true': parent.self.opener.serendipity_imageSelector_addToElement(img, f['serendipity[htmltarget]'].value); parent.self.close(); return true; case 'id': parent.self.opener.serendipity_imageSelector_addToElement(f['imgID'].value, starget); parent.self.close(); return true; case 'thumb': parent.self.opener.serendipity_imageSelector_addToElement(f['thumbName'].value, starget); parent.self.close(); return true; case 'big': parent.self.opener.serendipity_imageSelector_addToElement(f['imgName'].value, starget); parent.self.close(); return true; } } alt = f['serendipity[alt]'].value.replace(/"/g, """); title = f['serendipity[title]'].value.replace(/"/g, """); var imgID = 0; if (f['imgID']) { imgID = f['imgID'].value; } var floating = $(':input[name="serendipity[align]"]:checked').val(); if (floating == "") { floating = "center"; } img = "\"""; if ($("#radio_islink_yes").attr("checked")) { // wrap the img in a link to the image. TODO: The label in the media_chooser.tpl explains it wrong var targetval = $('#select_image_target').val(); var prepend = ''; var ilink = f['serendipity[url]'].value; var itarget = ''; switch (targetval) { case 'js': var itarget = ' onclick="F1 = window.open(\'' + f['serendipity[url]'].value + '\',\'Zoom\',\'' + 'height=' + (parseInt(f['imgHeight'].value) + 15) + ',' + 'width=' + (parseInt(f['imgWidth'].value) + 15) + ',' + 'top=' + (screen.height - f['imgHeight'].value) /2 + ',' + 'left=' + (screen.width - f['imgWidth'].value) /2 + ',' + 'toolbar=no,menubar=no,location=no,resize=1,resizable=1,scrollbars=yes\'); return false;"'; break; case '_blank': var itarget = ' target="_blank"'; break; case 'plugin': var itarget = ' id="s9yisphref' + imgID + '" onclick="javascript:this.href = this.href + \'&serendipity[from]=\' + self.location.href;"'; prepend = ''; ilink = f['baseURL'].value + 'serendipity_admin_image_selector.php?serendipity[step]=showItem&serendipity[image]=' + imgID; break; } var img = prepend + "" + img + ""; } if ($('#serendipity_imagecomment').val() != '') { var comment = f['serendipity[imagecomment]'].value; var img = '
' + '
' + img + '
' + '
' + comment + '
' + '
'; } parent.self.opener.serendipity_imageSelector_addToBody(img, textarea); parent.self.close(); } // Toggle extended entry editor function toggle_extended(setCookie) { if ($('#toggle_extended').length == 0) { // this function got called on load of the editor var toggleButton = '#toggle_extended'; $('textarea[name="serendipity[extended]"]').parent().prepend(' {$CONST.TOGGLE_ALL}'); $(toggleButton).click(function(e) { e.preventDefault(); toggle_extended(true); }); } if ($('textarea[name="serendipity[extended]"]:hidden').length > 0) { $('textarea[name="serendipity[extended]"]').show(); // use name selector instead of id here; id does not work $('#tools_extended').show(); $('#toggle_extended').find('> .icon-plus').removeClass('icon-plus').addClass('icon-minus'); } else { $('textarea[name="serendipity[extended]"]').hide(); $('#tools_extended').hide(); $('#toggle_extended').find('> .icon-minus').removeClass('icon-minus').addClass('icon-plus'); } if (setCookie) { document.cookie = 'serendipity[toggle_extended]=' + (($('textarea[name="serendipity[extended]"]:hidden').length == 0) ? "true" : "") + ';'; } } // Collapses/expands the category selector function toggle_category_selector(id) { if ($('#toggle_' + id).length == 0) { // this function got called on load of the editor var toggleButton = '#toggle_' + id; $('#'+id).before(' {$CONST.TOGGLE_ALL}'); $(toggleButton).click(function(e) { e.preventDefault(); toggle_category_selector(id); }); if ($('#'+id).children('*[selected="selected"]').length > 1) { // when loading the page new for the preview and more than one category was // selected, collapsing the category-selector would lose those categories $('#'+id).attr("size", $('#'+id).children().size); $('#toggle_' + id).find('> .icon-plus').removeClass('icon-plus').addClass('icon-minus'); return } } if ($('#'+id).attr("multiple")) { $('#'+id).removeAttr("multiple"); $('#'+id).removeAttr("size"); $('#toggle_' + id).find('> .icon-minus').removeClass('icon-minus').addClass('icon-plus'); } else { $('#'+id).attr("multiple", ""); $('#'+id).attr("size", $('#'+id).children().size); $('#toggle_' + id).find('> .icon-plus').removeClass('icon-plus').addClass('icon-minus'); } } // save in the cookie which options were selected when inserting a image from the media db function rememberMediaOptions() { $('#imageForm :input').each(function(index, element) { if (! (element.type == 'radio' && element.checked == false)) { SetCookie(element.name.replace(/\[/g, '_').replace(/\]/g, ''), $(element).val()); } }); } // Rescale image function rescale(dim, newval) { var ratio = $('#serendipityScaleImg').attr('data-imgheight')/$('#serendipityScaleImg').attr('data-imgwidth'); var trans = new Array(); trans['width'] = new Array('serendipity[height]', ratio); trans['height'] = new Array('serendipity[width]', 1/ratio); if ($('#resize_keepprops').is(':checked')) { document.serendipityScaleForm.elements[trans[dim][0]].value=Math.round(trans[dim][1]*newval); } } // Rename file in media db var media_rename = '{$CONST.ENTER_NEW_NAME}'; var media_token_url = '{$media.token_url}'; function rename(id, fname) { var newname; if (newname = prompt(media_rename + fname, fname)) { location.href='?serendipity[adminModule]=images&serendipity[adminAction]=rename&serendipity[fid]='+ escape(id) + '&serendipity[newname]='+ escape(newname) +'&'+ media_token_url; } } // Collapse/expand tree view in media db choose img popup window var tree_toggle_state = 'expand'; function treeToggleAll() { if (tree_toggle_state == 'expand') { tree_toggle_state = 'collapse'; tree.expandAll(); } else { tree_toggle_state = 'expand'; tree.collapseAll(); coreNode.expand(); } } // Used by media_upload.tpl to …? function getfilename(value) { re = /^.+[\/\\]+?(.+)$/; return value.replace(re, "$1"); } var inputStorage = new Array(); function checkInputs() { for (i = 1; i <= upload_fieldcount; i++) { if (!inputStorage[i]) { fillInput(i, i); } else if (inputStorage[i] == document.getElementById('target_filename_' + i).value) { fillInput(i, i); } } } function fillInput(source, target) { useDuplicate = false; // First field is a special value for foreign URLs instead of uploaded files if (source == 1 && document.getElementById('imageurl').value != "") { sourceval = getfilename(document.getElementById('imageurl').value); useDuplicate = true; } else { sourceval = getfilename(document.getElementById('userfile_' + source).value); } if (sourceval.length > 0) { document.getElementById('target_filename_' + target).value = sourceval; inputStorage[target] = sourceval; } // Display filename in duplicate form as well! if (useDuplicate) { tkey = target + 1; if (!inputStorage[tkey] || inputStorage[tkey] == document.getElementById('target_filename_' + tkey).value) { document.getElementById('target_filename_' + (target+1)).value = sourceval; inputStorage[target + 1] = '~~~'; } } } // end …? // …? function checkSave() { {serendipity_hookPlugin hook='backend_entry_checkSave' hookAll='true'} return true; } // Hides the foreign upload form if batch upload is used (if more // images are added) function hideForeign() { $('#foreign_upload').hide(); $('#imageurl').val(''); } // save in which directory the first uploaded files is stored (the default when only inserting one file) function rememberUploadOptions() { SetCookie("addmedia_directory", $('#target_directory_2').val()); } // Clones the upload form template function addUploadField() { upload_fieldcount = $('.uploadform_userfile').length + 1; var $fields = $('#upload_template').clone(); $fields.attr('id', 'upload_form_' + upload_fieldcount); $fields.removeClass('hidden'); var userfile = $('.uploadform_userfile', $fields); var userfile_label = $('.uploadform_userfile_label', $fields); var targetfilename = $('.uploadform_target_filename', $fields); var targetfilename_label = $('.uploadform_target_filename_label', $fields); var targetdir = $('.uploadform_target_directory', $fields); var targetdir_label = $('.uploadform_target_directory_label', $fields); userfile.attr('id', 'userfile_' + upload_fieldcount); userfile.attr('name', 'serendipity[userfile][' + upload_fieldcount + ']'); userfile_label.attr('for', 'userfile_' + upload_fieldcount); targetfilename.attr('id', 'target_filename_' + upload_fieldcount); targetfilename.attr('name', 'serendipity[target_filename][' + upload_fieldcount + ']'); targetfilename_label.attr('for', 'target_filename_' + upload_fieldcount); targetdir.attr('id', 'target_directory_' + upload_fieldcount); targetdir.attr('name', 'serendipity[target_directory][' + upload_fieldcount + ']'); targetdir_label.attr('for', 'target_directory_' + upload_fieldcount); $fields.insertBefore('#upload_form'); // This looks weird, but works. If anyone can improve this, by all means do so. $('#' + targetdir.attr('id')).val($($('#target_directory_' + (upload_fieldcount - 1))).val()); } // Inverts a selection of checkboxes function invertSelection() { var $chkboxes = $('#formMultiDelete .multidelete'); $chkboxes.prop('checked', !$chkboxes.attr('checked')) .trigger('click'); } // Highlight/dehighlight elements in lists function highlightComment(id, checkvalue) { $('#' + id).toggleClass('multidel_selected'); } (function($) { // Source: https://github.com/yatil/accessifyhtml5.js var AccessifyHTML5 = function (defaults, more_fixes) { "use strict"; var fixes = { 'article' : { 'role': 'article' }, 'aside' : { 'role': 'complementary' }, 'nav' : { 'role': 'navigation' }, 'main' : { 'role': 'main' }, 'output' : { 'aria-live': 'polite' }, 'section' : { 'role': 'region' }, '[required]': { 'aria-required': 'true' } }, fix, elems, attr, value, key, obj, i, mo, by_match, el_label, ATTR_SECURE = /aria-[a-z]+|role|tabindex|title|alt|data-[\w\-]+|lang|style|maxlength|placeholder|pattern|type/, ID_PREFIX = "acfy-id-", n_label = 0, Doc = document; if (Doc.querySelectorAll) { if (defaults) { if (defaults.header) { fixes[defaults.header] = { 'role': 'banner' }; } if (defaults.footer) { fixes[defaults.footer] = { 'role': 'contentinfo' }; } if (defaults.main) { fixes[defaults.main] = { 'role': 'main' }; fixes.main = { 'role': '' }; } } for (mo in more_fixes) { fixes[mo] = more_fixes[mo]; } for (fix in fixes) { if (fixes.hasOwnProperty(fix)) { elems = Doc.querySelectorAll(fix); obj = fixes[fix]; for (i = 0; i < elems.length; i++) { for (key in obj) { if (obj.hasOwnProperty(key)) { attr = key; value = obj[key]; if (!attr.match(ATTR_SECURE)) { continue; } if (!(typeof value).match(/string|number/)) { continue; } by_match = attr.match(/(describ|label)l?edby/); if (by_match) { el_label = Doc.querySelector(value); if (! el_label) { continue; } if (! el_label.id) { el_label.id = ID_PREFIX + n_label; } value = el_label.id; attr = "aria-" + ("label" === by_match[1] ? "labelledby" : "describedby"); n_label++; } if (!elems[i].hasAttribute(attr)) { elems[i].setAttribute(attr, value); } } } } } } } }; // Accessibility helper script AccessifyHTML5({ header: '#top>div>div', footer: '#meta' }); // Fire WYSIWYG editor(s) spawn(); // Editor-area var $entryEditor = $('body').has('#serendipityEntry'); if($entryEditor.size() > 0) { toggle_category_selector('categoryselector'); toggle_extended(); } // Click events // // Show entry timestamp $('.status_timestamp > a').click(function(e) { alert($(this).attr('title')); e.preventDefault(); }); // Make the timestamp readable in browser not supporting datetime-local. // Has no effect in those supporting it, as the timestamp is invalid in HTML5 if($entryEditor.size() > 0) { $('#serendipityNewTimestamp').val($('#serendipityNewTimestamp').val().replace("T", " ")); } // Set entry timestamp $('#reset_timestamp').click(function(e) { $('#serendipityNewTimestamp').val($(this).attr('data-currtime')); $('#serendipityNewTimestamp').val($('#serendipityNewTimestamp').val().replace("T", " ")); e.preventDefault(); }); // Editor tools $('.wrap_selection').click(function(e) { var $el = $(this); var $tag = $el.attr('data-tag'); var target = document.forms['serendipityEntry']['serendipity[' + $el.attr('data-tarea') + ']']; var open = '<' + $tag + '>'; var close = ''; wrapSelection(target, open, close); }); $('.wrap_insimg').click(function(e) { var target = document.forms['serendipityEntry']['serendipity[' + $(this).attr('data-tarea') + ']']; wrapInsImage(target); }); $('.wrap_insurl').click(function(e) { var target = document.forms['serendipityEntry']['serendipity[' + $(this).attr('data-tarea') + ']']; wrapSelectionWithLink(target); }); $('.wrap_insmedia').click(function(e) { window.open('serendipity_admin_image_selector.php?serendipity[textarea]=' + $(this).attr('data-tarea'), 'ImageSel', 'width=800,height=600,toolbar=no,scrollbars=1,scrollbars,resize=1,resizable=1'); }); // Entry preview $('.entry_preview').click(function(e) { document.forms['serendipityEntry'].elements['serendipity[preview]'].value='true'; }); // Collapsible configuration elements var $hasConfigOpts = $('body').has('#serendipity_config_options'); if($hasConfigOpts.size() > 0) { $('.show_config_option > .icon-minus').removeClass('icon-minus').addClass('icon-plus'); var optsCollapsed = true; $('.show_config_option').click(function(e) { var $el = $(this); var $toggled = $el.attr('href'); var $toggleIcon = $el.find('> span'); var $toggleState = $toggleIcon.attr('class'); if($toggleState == 'icon-minus') { $toggleIcon.removeClass('icon-minus').addClass('icon-plus'); } else { $toggleIcon.removeClass('icon-plus').addClass('icon-minus'); } $($toggled).toggleClass('additional_info'); e.preventDefault(); }); $('#show_config_all').click(function(e) { var $container = $(this).attr('href'); var $toggleIcons = $($container).find('.show_config_option > span'); var $toggleOption = $($container).find('.config_optiongroup'); if(optsCollapsed) { $toggleIcons.removeClass('icon-plus').addClass('icon-minus'); $toggleOption.removeClass('additional_info'); optsCollapsed = false; } else { $toggleIcons.removeClass('icon-minus').addClass('icon-plus'); $toggleOption.addClass('additional_info'); optsCollapsed = true; } e.preventDefault(); }); } // Comments $('.comments_delete').click(function(e) { var $msg = $(this).attr('data-delmsg'); return confirm($msg); }); $('.comments_reply').click(function(e) { cf = window.open(this.href, 'CommentForm', 'width=800,height=600,toolbar=no,scrollbars=1,scrollbars,resize=1,resizable=1'); cf.focus(); return false; }); $('.comments_multidelete').click(function(e) { return confirm('{$CONST.COMMENTS_DELETE_CONFIRM}'); }); // Category icon preview // NOTE: This is just to replace the old functionality; ideally, this should // have a working no-js fallback var $catIcon = $('body').has('#category_icon'); if($catIcon.size() > 0) { $('').insertAfter('#category_icon'); } $('#insert_image').click(function(e) { window.open('serendipity_admin_image_selector.php?serendipity[htmltarget]=category_icon&serendipity[filename_only]=true', 'ImageSel', 'width=800,height=600,toolbar=no,scrollbars=1,scrollbars,resize=1,resizable=1'); }); $('#category_icon').change(function(e) { $('#imagepreview').attr('src', $('#category_icon').val()); }); // Selection for multidelete $('.multidelete').click(function(e) { var $el = $(this); highlightComment($el.attr('data-multidelid'), $el.attr('checked')); }); // Invert checkboxes $('.invert_selection').click(function(e) { invertSelection(); }); // Go back one step $('.go_back').click(function() { history.go(-1); }); // Add media db upload field var $uploadForm = $('body').has('#uploadform'); if($uploadForm.size() > 0) { addUploadField(); } $('#add_upload').click(function(e) { hideForeign(); addUploadField(); }); // Check media db inputs $('.check_input').change(function(e) { checkInputs(); }); // Limit width of media file info var $mediaPane = $('body').has('.media_pane'); if($mediaPane.size() > 0) { var thumbsWidth = $('.media_pane').attr('data-thumbmaxwidth') + 'px'; $('.media_file_meta').css('maxWidth', thumbsWidth); } // Show media file info, template info or filters $('.media_show_info, .template_show_info, .filters_toolbar li > a').click(function(e) { $($(this).attr('href')).toggleClass('additional_info'); e.preventDefault(); }); // Media file actions $('.media_fullsize').click(function(e) { e.preventDefault(); var $el = $(this); var filepath = $el.attr('href'); var pwidth = $el.attr('data-pwidth'); var pheight = $el.attr('data-pheight'); var ptop = (screen.height - pheight)/2; var pleft = (screen.width - pwidth)/2; window.open(filepath, 'Zoom', 'height='+pheight+',width='+pwidth+',top='+ptop+',left='+pleft+',toolbar=no,menubar=no,location=no,resize=1,resizable=1,scrollbars=yes'); }); $('.media_rename').click(function(e) { e.preventDefault(); var $el = $(this); rename($el.attr('data-fileid'), $el.attr('data-filename')); }); $('#media_crop').click(function(e) { window.open($(this).attr('href'), 'ImageCrop', 'width=800,height=600,toolbar=no,scrollbars=1,scrollbars,resize=1,resizable=1').focus(); e.preventDefault(); }); // Confirm media scale $('.image_scale').click(function(e) { if (confirm('{$CONST.REALLY_SCALE_IMAGE}')) document.serendipityScaleForm.submit(); }); // Media scale change events $('#resize_width').change(function(e) { rescale('width' , $(this).val()); }); $('#resize_height').change(function(e) { rescale('height' , $(this).val()); }); // Show extended comment $('.toggle_comment_full').click(function(e) { var $toggles = $($(this).attr('href')); $toggles.toggleClass('additional_info'); $toggles.prev().toggleClass('additional_info'); e.preventDefault(); }); // MediaDB-Filter-Buttons should react instantly $('input[name="serendipity[filter][fileCategory]"]').on('change', function() { $('#media_library_control').submit(); }); // Clone form submit buttons $('#sort_entries > .form_buttons').clone().appendTo('#filter_entries'); $('#media_pane_sort > .form_buttons').clone().appendTo('#media_pane_filter'); // Clone pagination – this could become a function, which should also // check if the cloned pagination already exists $('.media_pane .pagination').clone().prependTo('.media_pane'); $('.comments_pane .pagination').clone().prependTo('.comments_pane'); $('.entries_pane .pagination').clone().prependTo('.entries_pane'); // Equal Heights var $eqHeights = $('body').has('.equal_heights'); $(window).load(function() { if($eqHeights.size() > 0) { $('.equal_heights').syncHeight({ updateOnResize: true }); } }); })(jQuery);