/** * Coppermine Photo Gallery * * v1.0 originally written by Gregory Demar * * @copyright Copyright (c) 2003-2021 Coppermine Dev Team * @license GNU General Public License version 3 or later; see LICENSE * * js/scripts.js * @since 1.6.11 */ // Object to hold javascript keyCodes for various keys var KEY_CODES = { TAB : 9, ENTER : 13 }; var GB_ANIMATION = true; $(function() { $(".cpg_zebra tr:even td:not(.tableh1)").addClass("tableb"); $(".cpg_zebra tr:odd td:not(.tableh1)").addClass("tableb tableb_alternate"); }); function MM_openBrWindow(theURL,winName,features) { //v2.0 window.open(theURL,winName,features); } function writeCookie(name, data, noDays) { if (js_vars.cookies_allowed == true) { var cookieStr = name + "="+ data; if (writeCookie.arguments.length > 2){ cookieStr += "; expires=" + getCookieExpireDate(noDays); } document.cookie = cookieStr; } } function readCookie(cookieName) { var searchName = cookieName + "="; var cookies = document.cookie; var start = cookies.indexOf(cookieName); if (start == -1){ // cookie not found return ""; } start += searchName.length; //start of the cookie data var end = cookies.indexOf(";", start); if (end == -1){ end = cookies.length; } return cookies.substring(start, end); } function blocking(nr, cookie, vis_state) { display = ($("#" + nr).css('display') == 'none') ? vis_state : 'none'; if (cookie != ''){ writeCookie(nr, display); } $('#' + nr).css('display', display); } function show_section(e) { $('#' + e).toggle(); } function expand() { $("table[id^='section']").show(); } function hideall() { $("table[id^='section']").hide(); } function selectAll(form_name) { $('#' + form_name).data('boxes_checked', $('#' + form_name).data('boxes_checked') ? false : true); $('#' + form_name + ' input:checkbox').each(function(){ this.checked = $('#' + form_name).data('boxes_checked'); }); } function redirect(url) { window.location=url; } // Function used to not allow user to enter default username as username for comment function notDefaultUsername(f, defaultUsername, defaultUsernameMessage) { // If username for comment is default username then display error message and return false if (f.msg_author.value == defaultUsername || f.msg_author.value == '') { alert(defaultUsernameMessage); return false; } // By default return true return true; } function HighlightAll(theField) { var tempval=eval("document."+theField); tempval.focus(); tempval.select(); } var onloads = []; function addonload(func){ onloads.push(func); } /** * sprintf() for JavaScript v.0.4 * * Copyright (c) 2007 Alexandru Marasteanu * Thanks to David Baird (unit test and patch). * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License, or (at your option) any later * version. */ function str_repeat(i, m) { for (var o = []; m > 0; o[--m] = i); return(o.join('')); } function sprintf () { var i = 0, a, f = arguments[i++], o = [], m, p, c, x; while (f) { if (m = /^[^\x25]+/.exec(f)) o.push(m[0]); else if (m = /^\x25{2}/.exec(f)) o.push('%'); else if (m = /^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(f)) { if (((a = arguments[m[1] || i++]) == null) || (a == undefined)) throw("Too few arguments."); if (/[^s]/.test(m[7]) && (typeof(a) != 'number')) throw("Expecting number but found " + typeof(a)); switch (m[7]) { case 'b': a = a.toString(2); break; case 'c': a = String.fromCharCode(a); break; case 'd': a = parseInt(a); break; case 'e': a = m[6] ? a.toExponential(m[6]) : a.toExponential(); break; case 'f': a = m[6] ? parseFloat(a).toFixed(m[6]) : parseFloat(a); break; case 'o': a = a.toString(8); break; case 's': a = ((a = String(a)) && m[6] ? a.substring(0, m[6]) : a); break; case 'u': a = Math.abs(a); break; case 'x': a = a.toString(16); break; case 'X': a = a.toString(16).toUpperCase(); break; } a = (/[def]/.test(m[7]) && m[2] && a > 0 ? '+' + a : a); c = m[3] ? m[3] == '0' ? '0' : m[3].charAt(1) : ' '; x = m[5] - String(a).length; p = m[5] ? str_repeat(c, x) : ''; o.push(m[4] ? a + p : p + a); } else throw ("Huh ?!"); f = f.substring(m[0].length); } return o.join(''); } // end function sprintf // PHP equivalent of stript_tags. // Source: http://phpjs.org function strip_tags (str, allowed_tags) { // Strips HTML and PHP tags from a string // // version: 908.406 // discuss at: http://phpjs.org/functions/strip_tags var key = '', allowed = false; var matches = []; var allowed_array = []; var allowed_tag = ''; var i = 0; var k = ''; var html = ''; var replacer = function (search, replace, str) { return str.split(search).join(replace); }; // Build allowes tags associative array if (allowed_tags) { allowed_array = allowed_tags.match(/([a-zA-Z0-9]+)/gi); } str += ''; // Match tags matches = str.match(/(<\/?[\S][^>]*>)/gi); // Go through all HTML tags for (key in matches) { if (isNaN(key)) { // IE7 Hack continue; } // Save HTML tag html = matches[key].toString(); // Is tag not in allowed list? Remove from str! allowed = false; // Go through all allowed tags for (k in allowed_array) { // Init allowed_tag = allowed_array[k]; i = -1; if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+'>');} if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+' ');} if (i != 0) { i = html.toLowerCase().indexOf(' with \n // This function is generally used to show error messages in js alert function strip_html(content) { // We will first replace
with \n content = content.replace('
', '\n'); content = content.replace('
', '\n'); return strip_tags(content); } // function str_replace (search, replace, subject, count) { // Replaces all occurrences of search in haystack with replace // // version: 908.406 // discuss at: http://phpjs.org/functions/str_replace var i = 0, j = 0, temp = '', repl = '', sl = 0, fl = 0, f = [].concat(search), r = [].concat(replace), s = subject, ra = r instanceof Array, sa = s instanceof Array; s = [].concat(s); if (count) { this.window[count] = 0; } for (i=0, sl=s.length; i < sl; i++) { if (s[i] === '') { continue; } for (j=0, fl=f.length; j < fl; j++) { temp = s[i]+''; repl = ra ? (r[j] !== undefined ? r[j] : '') : r[0]; s[i] = (temp).split(f[j]).join(repl); if (count && s[i] !== temp) { this.window[count] += (temp.length-s[i].length)/f[j].length; } } } return sa ? s : s[0]; } // This prototype is from the public domain. // Source: http://www.hunlock.com/blogs/Mastering_Javascript_Arrays if (!Array.prototype.find) { Array.prototype.find = function(searchStr) { var returnArray = false; for (i=0; i