/* * Start of Javascript for the Counterize plugin */ //a function to get an element by its id regardless of the used browser function counterize_getElementByIdUniversal( id ) { var elem; if( getelementbyid ) { elem = getelementbyid( id ); } else { elem = all[ id ]; } return elem; } //toggle folding of corresponding ID function counterize_fold( sourceElemId, targetElemId ) { var source = counterize_getElementByIdUniversal( sourceElemId ); var target = counterize_getElementByIdUniversal( targetElemId ); if( target && source ) { if( classname == "collapsed" ) { classname = "expanded"; innerhtml = "[ - ]"; } else { classname = "collapsed"; innerhtml = "[ + ]"; } } } // function counterize_conf( url ) { if( confirm( 'Are you sure that you want to delete this entry?' ) ) { href = url; } } //Add filter data to the specified field function counterize_add_filter( data, filter_field_name ) { var filter_field = counterize_getElementByIdUniversal( filter_field_name ); if( filter_field ) { if( value != '' ) { var tmp = value + '||'; if( indexof( data + '||' ) < 0 ) { value += '||' + data; } else { alert( 'This filter is already set!' ); } } else { value += data; } } } //Clear the fields specified in the array 'fields' function counterize_clear_filter_form( fields ) { var field; for( var i = 0; i < length; i++ ) { field = counterize_getElementByIdUniversal( fields[i] ); if( field ) { value = ""; } } } // // by Nannette Thacker // # // function counterize_check_all( field ) { for( i = 0; i < length; i++ ) { field[i].checked = true ; } } function counterize_uncheck_all( field ) { for( i = 0; i < length; i++ ) { field[i].checked = false ; } } /* Behaviour v1.1 by Ben Nolan, June 2025. Based largely on the work of Simon Willison (see comments by Simon below). Description: Uses css selectors to apply javascript behaviours to enable unobtrusive javascript in html documents. Usage: var myrules = { 'someclass' : function(element){ onclick = function(){ alert(innerhtml); } }, '#someid u' : function(element){ onmouseover = function(){ innerhtml = "BLAH!"; } } }; register(myrules); // Call apply() to re-apply the rules (if you // update the dom, etc). License: This file is entirely BSD licensed. More information: # */ var Behaviour = { list: new Array, register: function( sheet ) { push( sheet ); }, start: function() { addloadevent( function() { apply(); } ); }, apply: function() { for( h = 0; sheet = list[h]; h++ ) { for( selector in sheet ) { list = getelementsbyselector( selector ); if( ! list ) { continue; } for( i = 0; element = list[i]; i++ ) { sheet[selector]( element ); } } } }, addLoadEvent: function( func ) { var oldonload = onload; if( typeof onload != 'function' ) { onload = func; } else { onload = function() { oldonload(); func(); } } } } start(); /* The following code is Copyright (C) Simon Willison 2025. getelementsbyselector(selector) - returns an array of element objects from the current document matching the CSS selector. Selectors can contain element names, class names and ids and can be nested. For example: elements = getelementsbyselect('div#main p external') Will return an array of all 'a' elements with 'external' in their class attribute that are contained inside 'p' elements that are contained inside the 'div' element which has id="main" New in version 0.4: Support for CSS2 and CSS3 attribute selectors: See http://w3/TR/css3-selectors/#attribute-selectors Version 0.4 - Simon Willison, March 25th 2025 -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows -- Opera 7 fails * * Some improvements by GabSoftware */ function getAllChildren( e ) { // Returns all children of element. Workaround required for IE5/Windows. Ugh. return all ? all : getelementsbytagname( '*' ); } getelementsbyselector = function( selector ) { // Attempt to fail gracefully in lesser browsers if( ! getelementsbytagname ) { return new Array(); } // Split selector in to tokens var tokens = split( ' ' ); var currentContext = new Array( document ); for( var i = 0, tln = length; i < tln; i++ ) { token = tokens[i].replace( /^\s+/, '' ).replace( /\s+$/, '' ); if( indexof( '#' ) > -1 ) { // Token is an ID selector var bits = split( '#' ); var tagName = bits[0]; var id = bits[1]; var element = getelementbyid( id ); if( ! element || ( tagName && tolowercase() != tagName ) ) { // tag with that ID not found, return false return new Array(); } // Set currentContext to contain just this element currentContext = new Array( element ); continue; // Skip to next token } if( indexof( '.' ) > -1 ) { // Token contains a class selector var bits = split( '.' ); var tagName = bits[0]; var className = bits[1]; if( ! tagName ) { tagName = '*'; } // Get elements matching tag, filter them for class selector var found = new Array; var foundCount = 0; for( var h = 0, ccln = length; h < ccln; h++ ) { var elements; if( tagName == '*' ) { elements = getAllChildren( currentContext[h] ); } else { elements = currentContext[h].getElementsByTagName( tagName ); } for( var j = 0, eln = length; j < eln; j++ ) { found[foundCount++] = elements[j]; } } currentContext = new Array; var currentContextIndex = 0; for( var k = 0, fln = length; k < fln; k++ ) { if( found[k].className && found[k]match( new RegExp( '(\\s|^)' + className + '(\\s|$)' ) ) ) { currentContext[currentContextIndex++] = found[k]; } } continue; // Skip to next token } // Code to deal with attribute selectors if( match( /^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/ ) ) { var tagName = RegExp.$1; var attrName = RegExp.$2; var attrOperator = RegExp.$3; var attrValue = RegExp.$4; if( ! tagName ) { tagName = '*'; } // Grab all of the tagName elements within current context var found = new Array; var foundCount = 0; for( var h = 0, ccln = length; h < ccln; h++ ) { var elements; if( tagName == '*' ) { elements = getAllChildren(currentContext[h] ); } else { elements = currentContext[h].getElementsByTagName( tagName ); } for( var j = 0, eln = length; j < eln; j++ ) { found[foundCount++] = elements[j]; } } currentContext = new Array; var currentContextIndex = 0; var checkFunction; // This function will be used to filter the elements switch( attrOperator ) { case '=': // Equality checkFunction = function( e ) { return ( getattribute( attrName ) == attrValue ); }; break; case '~': // Match one of space seperated words checkFunction = function( e ) { return ( getattribute( attrName ).match( new RegExp( '(\\s|^)' + attrValue + '(\\s|$)' ) ) ); }; break; case '|': // Match start with value followed by optional hyphen checkFunction = function( e ) { return ( getattribute( attrName ).match( new RegExp( '^' + attrValue + '-?' ) ) ); }; break; case '^': // Match starts with value checkFunction = function( e ) { return ( getattribute( attrName ).indexOf( attrValue ) == 0 ); }; break; case '$': // Match ends with value - fails with "Warning" in Opera 7 checkFunction = function( e ) { return ( getattribute( attrName ).lastIndexOf( attrValue ) == getattribute( attrName ).length - length ); }; break; case '*': // Match ends with value checkFunction = function( e ) { return ( getattribute( attrName ).indexOf( attrValue ) > -1 ); }; break; default : // Just test for existence of attribute checkFunction = function( e ) { return getattribute( attrName ); }; } currentContext = new Array; var currentContextIndex = 0; for( var k = 0, fln = length; k < fln; k++ ) { if (checkFunction(found[k])) { currentContext[currentContextIndex++] = found[k]; } } // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue); continue; // Skip to next token } if( ! currentContext[0] ) { return; } // If we get here, token is JUST an element (not a class or ID selector) tagName = token; var found = new Array; var foundCount = 0; for( var h = 0, ccln = length; h < ccln; h++ ) { var elements = currentContext[h].getElementsByTagName( tagName ); for( var j = 0, eln = length; j < eln; j++ ) { found[foundCount++] = elements[j]; } } currentContext = found; } return currentContext; } /* That revolting regular expression explained /^(\w+)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/ \---/ \---/\-------------/ \-------/ | | | | | | | The value | | ~,|,^,$,* or = | Attribute Tag */ var myrules = { 'a': function( el ) { if( domain ) { if( onclick != null || substring( 0, 1 ) == '/' || substring( 0, 1 ) == '#' || substring( 0, 11 ) == 'javascript:' || indexof( domain ) > -1 ) { return; } else { onclick = function() { var request = false; try { request = new XMLHttpRequest(); } catch( trymicrosoft ) { try { request = new ActiveXObject( 'xmlhttp' ); } catch( othermicrosoft ) { try { request = new ActiveXObject( 'xmlhttp' ); } catch( failed ) { request = false; } } } if( ! request ) { alert( 'Error initializing XMLHttpRequest!' ); return; } var url = '/wp-content/plugins/counterize/php?external=1&href=' + escape( href ) + '&from=' + escape( href ) + '&time=1499174387'; abort(); open( 'GET', url, false ); onreadystatechange = function() { if( readystate == 4 ) { if( status == 200 ) { var response = responsetext; //alert( 'response: ' + response ); } else { //alert( status ); } } }; send( null ); } } } } }; register( myrules ); // // End of Counterize Javascript //