Files
2025-12-19 00:26:08 -08:00

1073 lines
27 KiB
JavaScript

//------------------------------------------
// Invision Power Board v2.1
// ACP Specific JS File
// (c) 2005 Invision Power Services, Inc.
//
// http://www.invisionboard.com
//------------------------------------------
var div_template_sections;
var div_template_bits;
var div_template_edit;
var iframe_template_bits;
var iframe_template_edit;
var template_section_anim;
var template_column_anim;
var template_section_fwidth = 50;
var template_section_fheight = 475;
var template_section_mheight = 250;
var template_edit_mheight = 400;
var template_edit_mheight_mpl = 360;
var template_edit_mheight_mpl_pad = 65;
var template_section_moved = 0;
var template_columns_moved = 0;
var main_height;
var template_group_loaded;
var template_search_input_obj = '';
var template_bit_loaded = new Array();
var template_anim_done = 0;
var class_before = 'tablerow1';
var class_after = 'tablerow3';
var editor_contents = new Array();
var editor_unload_set = 0;
var editor_form_id = 'template-bits-form';
var iframes_loaded = new Array();
var search_group_name;
var search_template_bit;
var ie_rs_count = 0;
var cur_tid_loaded = 0;
var bits_clicked = new Array();
/*-------------------------------------------------------------------------*/
// Template View Diff
/*-------------------------------------------------------------------------*/
function template_view_diff( tid )
{
try
{
menu_action_close();
}
catch(e) { }
pop_win( 'section=lookandfeel&act=skindiff&code=skin_diff_view_diff&diff_key=' + tid, 'DiffWindow'+tid.replace( /:/g, '_' ), 700, 500 );
return false;
}
/*-------------------------------------------------------------------------*/
// Template INIT
/*-------------------------------------------------------------------------*/
function template_init()
{
div_template_sections = document.getElementById('template-sections');
div_template_bits = document.getElementById('template-bits');
div_template_edit = document.getElementById('template-edit');
iframe_template_bits = document.getElementById('tb-iframe');
iframe_template_edit = document.getElementById('te-iframe');
template_search_input_obj = document.getElementById('entered_template');
main_height = parseInt( div_template_sections.style.height );
//------------------------------------------
// Use quick search?
//------------------------------------------
if ( ! use_enhanced_js )
{
try
{
document.getElementById( 'quick-search-box' ).innerHTML = ' ';
}
catch(e){ }
}
//------------------------------------------
// Add key listener to capture enter
//------------------------------------------
if ( use_enhanced_js )
{
try
{
template_search_input_obj.onkeypress = function(e)
{
e = e ? e : window.event;
switch (e.keyCode)
{
case 13:
template_find_bits(e);
return false;
}
}
}
catch(e){ }
}
//------------------------------------------
// IE FIX... grrr
//------------------------------------------
if ( is_ie && !is_ie7 )
{
//div_template_sections.style.position = 'absolute';
document.getElementById('template-main-wrap').style.height = parseInt( div_template_sections.style.height ) + 'px';
}
//------------------------------------------
// Searching?
//------------------------------------------
if ( template_search )
{
//------------------------------------------
// Hide rows we don't have matches for
//------------------------------------------
var groups = document.getElementsByTagName('DIV');
for ( var i = 0 ; i <= groups.length ; i++ )
{
var e = groups[i];
if ( e && e.id )
{
var id = e.id;
var gname = id.replace( /^dv-(.+?)$/, "$1" );
if ( gname != id && ! search_template_sections[ gname ] )
{
e.style.display = 'none';
}
}
}
//------------------------------------------
// Add in matches
//------------------------------------------
try
{
for ( var i in search_template_matches )
{
document.getElementById( 'match-'+i ).innerHTML = '(' + search_template_matches[i] + ' ' + lang_matches + ')';
}
}
catch(e)
{
}
}
}
/*-------------------------------------------------------------------------*/
// Onload events
/*-------------------------------------------------------------------------*/
function template_iframe_loaded( framekey )
{
if ( framekey == 'tb' )
{
if( is_ie )
{
var frame_loaded = document.getElementById('template-bits').style.display;
if( frame_loaded == 'none' )
{
return true;
}
}
//------------------------------------------
// Add onclick events to revert images
//------------------------------------------
var images = window.frames['tb-iframe'].document.getElementsByTagName('img');
//----------------------------------
// Sort through and grab topic links
//----------------------------------
for ( var i = 0 ; i <= images.length ; i++ )
{
try
{
if ( ! images[i].id )
{
continue;
}
}
catch(e)
{
continue;
}
var imgid = images[i].id;
var imgname = imgid.replace( /^(.*)-(\d+)$/, "$1" );
if ( imgname == 'img-remove' )
{
images[i].onclick = template_revert_clicked;
}
}
}
}
/*-------------------------------------------------------------------------*/
// Find template bits
/*-------------------------------------------------------------------------*/
function template_find_bits(event)
{
//------------------------------------------
// INIT
//------------------------------------------
var search_box = document.getElementById( 'entered_template' );
if ( ! search_box.value )
{
return false;
}
//------------------------------------------
// Get template bit name and stuff
//------------------------------------------
search_group_name = search_box.value.replace( /.*\((.+?)\)/, "$1" );
search_template_bit = search_box.value.replace( /(.*)\(.+?\)/, "$1" );
//------------------------------------------
// Strip whitespace
//------------------------------------------
search_group_name = search_group_name.replace( /^\s*|\s*$/g , "" );
search_template_bit = search_template_bit.replace( /^\s*|\s*$/g, "" );
//------------------------------------------
// Load group name
//------------------------------------------
try
{
if ( search_group_name )
{
if ( search_template_bit )
{
if ( is_ie )
{
iframe_template_bits.onreadystatechange = _template_load_editor_loader;
}
else
{
iframe_template_bits.onload = _template_load_editor_loader;
}
}
template_load_bits( search_group_name, event, false );
}
}
catch(e)
{
alert( "Could not locate a template bit called: " + search_box.value + "\nPlease search in the format:\ntemplate_name (template_group)" );
}
}
/*-------------------------------------------------------------------------*/
// Restore template bit
/*-------------------------------------------------------------------------*/
function template_bit_restore( tid )
{
//------------------------------------------
// INIT
//------------------------------------------
var edit_box_obj = window.frames['te-iframe'].document.getElementById( 't'+tid );
var edit_box_button = window.frames['te-iframe'].document.getElementById( 'sb-t' + tid );
edit_box_button.className = 'realdarkbutton';
if ( editor_contents[ 't'+tid ] )
{
if ( confirm("Are you sure you want to restore the template?\nALL UNSAVED CHANGES WILL BE LOST!") )
{
edit_box_obj.value = editor_contents[ 't'+tid ];
editor_contents[ 't'+tid ] = '';
}
}
}
/*-------------------------------------------------------------------------*/
// Close down template edit screen
/*-------------------------------------------------------------------------*/
function template_edit_close( tid )
{
//------------------------------------------
// Check
//------------------------------------------
if ( editor_contents[ 't'+tid ] )
{
if ( ! confirm('WARNING: CLICK "OK" TO LOSE ANY UNSAVED CHANGES' ) )
{
return false;
}
}
//------------------------------------------
// Close
//------------------------------------------
editor_contents[ 't'+tid ] = '';
div_template_edit.style.display = 'none';
iframe_template_edit.src = ipb_skin_url + '/iframe.html';
}
/*-------------------------------------------------------------------------*/
// Editor has changed
/*-------------------------------------------------------------------------*/
function template_bit_changed( tid )
{
//------------------------------------------
// Already changed?
//------------------------------------------
var edit_box_obj = window.frames['te-iframe'].document.getElementById( tid );
var edit_box_button = window.frames['te-iframe'].document.getElementById( 'sb-' + tid );
if ( edit_box_button.className == 'realredbutton' )
{
return;
}
//------------------------------------------
// Store current tid loaded
//------------------------------------------
cur_tid_loaded = tid.replace( /t(\d+)/, "$1" );
//------------------------------------------
// Change flag
//------------------------------------------
window.frames['te-iframe'].document.getElementById( 'edited-' + cur_tid_loaded ).value = 1;
//------------------------------------------
// No?
//------------------------------------------
editor_contents[ tid ] = edit_box_obj.value;
edit_box_button.className = 'realredbutton';
editor_unload_set = 1;
//------------------------------------------
// Set onsubmit event
//------------------------------------------
window.frames['te-iframe'].document.getElementById( editor_form_id ).onsubmit = template_edit_onsubmit;
}
/*-------------------------------------------------------------------------*/
// On submit, reload to iframe
/*-------------------------------------------------------------------------*/
function template_edit_onsubmit( event )
{
editor_unload_set = 0;
//------------------------------------------
// Change row image
//------------------------------------------
if ( cur_tid_loaded > 0 )
{
_template_change_state_image( cur_tid_loaded, 'altered' );
_template_change_revert_image( cur_tid_loaded, img_revert_real );
}
return true;
}
/*-------------------------------------------------------------------------*/
// EDITOR LOADED: On load, reload to selected bit
/*-------------------------------------------------------------------------*/
function template_bit_onload()
{
if ( template_bit_loaded.length )
{
for ( var i in template_bit_loaded )
{
window.frames['tb-iframe'].document.getElementById( template_bit_loaded[i] ).className = class_after;
}
}
return true;
}
/*-------------------------------------------------------------------------*/
// TEMPLATE BIT NAMES LOADED: On load chop out non search results
/*-------------------------------------------------------------------------*/
function template_bits_onload()
{
//------------------------------------------
// Searching?
//------------------------------------------
var maingroup = template_group_loaded.replace( /^dv-/, '' );
if ( parent.template_search )
{
//------------------------------------------
// Hide rows we don't have matches for
//------------------------------------------
var groups = window.frames['tb-iframe'].document.getElementsByTagName('DIV');
for ( var i = 0 ; i <= groups.length ; i++ )
{
var e = groups[i];
if ( e && e.id )
{
var id = e.id;
var gname = id.replace( /^dvb-(.+?)$/, "$1" );
if ( gname != id && ! search_template_bits[ maingroup + '_' + gname ] )
{
e.style.display = 'none';
}
}
}
}
return true;
}
/*-------------------------------------------------------------------------*/
// Onclick handler: Revert clicked
/*-------------------------------------------------------------------------*/
function template_revert_clicked(event)
{
event = template_cancel_bubble( event, true );
if ( this.id )
{
var clickedid = this.id.replace( /^.*-(\d+)$/, "$1" );
}
if ( clickedid )
{
var clicked_href = window.frames['tb-iframe'].document.getElementById('link-remove-'+clickedid).href;
var finalhref = clicked_href.replace( /javascript:confirm_action\('(.+?)'\)/, "$1" );
var bitname = clicked_href.replace( /.*bitname=(.+?)&.*/ , "$1" );
var custombit = clicked_href.replace( /.*custombit=(.+?)/, "$1" );
if ( confirm( "WARNING: You cannot undo this action!\nPress OK to continue or CANCEL to cancel this action..." ) )
{
if ( use_enhanced_js && parseInt(custombit) != 1 )
{
/*--------------------------------------------*/
// Main function to do on request
// Must be defined first!!
/*--------------------------------------------*/
do_request_function = function()
{
//----------------------------------
// Ignore unless we're ready to go
//----------------------------------
if ( ! xmlobj.readystate_ready_and_ok() )
{
return;
}
//----------------------------------
// Change icons
//----------------------------------
_template_change_state_image( clickedid, 'unaltered' );
_template_change_revert_image( clickedid, img_revert_blank );
//----------------------------------
// Re-load editor frame
//----------------------------------
if ( template_bit_loaded.length )
{
for ( var i in template_bit_loaded )
{
if ( template_bit_loaded[i] && template_bit_loaded[i].replace('dvb-', '' ) == bitname )
{
iframe_template_edit.src = iframe_template_edit.src;
}
}
}
}
//----------------------------------
// LOAD XML
//----------------------------------
xmlobj = new ajax_request();
xmlobj.onreadystatechange( do_request_function );
xmlobj.process( finalhref.replace( /type=frame/, 'type=xml' ) );
}
else
{
iframe_template_bits.src = finalhref;
}
}
}
return false;
}
/*-------------------------------------------------------------------------*/
// Close template bit window
/*-------------------------------------------------------------------------*/
function template_close_bits()
{
//------------------------------------------
// Resize other div and iframe
//------------------------------------------
div_template_bits.style.width = '0%';
div_template_bits.style.display = 'none';
iframe_template_bits.style.width = '0%';
iframe_template_bits.style.display = 'none';
//------------------------------------------
// Change row color
//------------------------------------------
if ( template_group_loaded )
{
document.getElementById( template_group_loaded ).className = class_before;
}
//------------------------------------------
// Close editor?
//------------------------------------------
if ( template_bit_loaded.length )
{
div_template_edit.style.display = 'none';
iframe_template_edit.src = ipb_skin_url + '/iframe.html';
}
//------------------------------------------
// Do anim
//------------------------------------------
template_section_moved = 0;
template_sections_expand();
}
/*-------------------------------------------------------------------------*/
// Load template bits iframe
/*-------------------------------------------------------------------------*/
function template_add_bit( add_url, event )
{
//------------------------------------------
// INIT
//------------------------------------------
var url_to_load = add_url;
var newheight = 220;
var newpadding = 0;
//------------------------------------------
// Got an event? From a link, then
//------------------------------------------
if ( event )
{
template_cancel_bubble( event, true, window.frames['tb-iframe'] );
}
//------------------------------------------
// Unsaved changes?
//------------------------------------------
if ( editor_unload_set )
{
if ( ! confirm('WARNING: CLICK "OK" TO LOSE ANY UNSAVED CHANGES' ) )
{
return false;
}
}
editor_contents = new Array();
editor_unload_set = 0;
//------------------------------------------
// Resize other div and iframe
//------------------------------------------
div_template_edit.style.width = '100%';
div_template_edit.style.height = newheight + newpadding + 'px';
div_template_edit.style.display = 'block';
iframe_template_edit.style.width = '100%';
iframe_template_edit.style.height = newheight + newpadding + 'px';
iframe_template_edit.scrolling = 'auto';
iframe_template_edit.frameborder = 'no';
iframe_template_edit.style.display = 'block';
//------------------------------------------
// Load bits
//------------------------------------------
iframe_template_edit.src = url_to_load;
}
/*-------------------------------------------------------------------------*/
// Load template bits iframe
/*-------------------------------------------------------------------------*/
function template_load_editor( bit_name, event, bit_url )
{
//------------------------------------------
// INIT
//------------------------------------------
var count = 1;
//------------------------------------------
// Loading from a clicked link
//------------------------------------------
if ( ! bit_url )
{
var bn_object = window.frames['tb-iframe'].document.getElementById( 'bn-'+bit_name );
var url_to_load = bn_object.href;
var newheight = template_edit_mheight;
var newpadding = 0;
}
//------------------------------------------
// Loading from a URL (multiple bits
//------------------------------------------
else
{
var url_to_load = bit_url;
var newheight = template_edit_mheight_mpl;
var newpadding = template_edit_mheight_mpl_pad;
}
//------------------------------------------
// Got an event? From a link, then
//------------------------------------------
if ( event )
{
template_cancel_bubble( event, true, window.frames['tb-iframe'] );
}
//------------------------------------------
// Unsaved changes?
//------------------------------------------
if ( editor_unload_set )
{
if ( ! confirm('WARNING: CLICK "OK" TO LOSE ANY UNSAVED CHANGES' ) )
{
return false;
}
}
editor_contents = new Array();
editor_unload_set = 0;
//------------------------------------------
// Change row color
//------------------------------------------
if ( template_bit_loaded.length )
{
try
{
for ( var i in template_bit_loaded )
{
// Change any coloured rows back
window.frames['tb-iframe'].document.getElementById( template_bit_loaded[i] ).className = class_before;
}
}
catch(e)
{
}
}
//------------------------------------------
// Multiple bits?
//------------------------------------------
if ( bit_url )
{
try
{
for( var i in bits_clicked )
{
count++;
window.frames['tb-iframe'].document.getElementById( 'dvb-'+i ).className = class_after;
template_bit_loaded[ template_bit_loaded.length + 1 ] = 'dvb-'+i;
}
}
catch(e)
{
}
count--;
}
//------------------------------------------
// Single bits
//------------------------------------------
else
{
template_bit_loaded = new Array();
window.frames['tb-iframe'].document.getElementById( 'dvb-'+bit_name ).className = class_after;
template_bit_loaded[ template_bit_loaded.length + 1 ] = 'dvb-'+bit_name;
}
//------------------------------------------
// Resize other div and iframe
//------------------------------------------
div_template_edit.style.width = '100%';
div_template_edit.style.height = newheight * count + newpadding + 'px';
div_template_edit.style.display = 'block';
iframe_template_edit.style.width = '100%';
iframe_template_edit.style.height = newheight * count + newpadding + 'px';
iframe_template_edit.scrolling = 'auto';
iframe_template_edit.frameborder = 'no';
iframe_template_edit.style.display = 'block';
//------------------------------------------
// Load bits
//------------------------------------------
iframe_template_edit.src = url_to_load;
//------------------------------------------
// Scroll up..
//------------------------------------------
var _reach_the_stars = _get_obj_toppos( div_template_edit );
if ( _reach_the_stars )
{
scroll( 0, _reach_the_stars );
}
}
/*-------------------------------------------------------------------------*/
// Load template bits iframe
/*-------------------------------------------------------------------------*/
function template_load_bits( group_name, event, nocancel )
{
//------------------------------------------
// INIT
//------------------------------------------
var gn_object = document.getElementById( 'gn-'+group_name );
var url_to_load = gn_object.href;
//------------------------------------------
// Don't cancel if we're reloading
//------------------------------------------
if ( nocancel != true )
{
template_cancel_bubble( event, true );
}
//------------------------------------------
// Change row color
//------------------------------------------
if ( template_group_loaded )
{
// Change any coloured rows back
document.getElementById( template_group_loaded ).className = class_before;
template_cancel_bubble( event, true );
}
document.getElementById( 'dv-'+group_name ).className = class_after;
template_group_loaded = 'dv-'+group_name;
//------------------------------------------
// Do anim
//------------------------------------------
if ( ! template_section_moved )
{
template_section_moved = 1;
template_sections_contract();
}
//------------------------------------------
// Resize other div and iframe
//------------------------------------------
div_template_bits.style.width = 100 - template_section_fwidth + '%';
div_template_bits.style.height = main_height + 'px';
div_template_bits.style.display = '';
//------------------------------------------
// Load bits
//------------------------------------------
iframe_template_bits.src = url_to_load;
iframe_template_bits.style.height = main_height + 'px';
iframe_template_bits.scrolling = 'auto';
iframe_template_bits.frameborder = 'no';
iframe_template_bits.style.display = '';
iframe_template_bits.style.width = '100%';
}
/*-------------------------------------------------------------------------*/
// Anim: Move section to the left
/*-------------------------------------------------------------------------*/
function template_sections_contract()
{
var width = parseInt( div_template_sections.style.width ) ? parseInt( div_template_sections.style.width ) : 100;
var new_width = width - 10;
clearTimeout( template_section_anim );
if ( new_width < template_section_fwidth )
{
new_width = template_section_fwidth;
}
div_template_sections.style.width = new_width + '%';
//------------------------------------------
// Still got some more to go?
//------------------------------------------
if ( new_width > template_section_fwidth )
{
template_anim_done = 0;
template_section_anim = setTimeout( 'template_sections_contract()', 5 );
}
else
{
template_anim_done = 1;
bits_clicked = new Array();
}
}
/*-------------------------------------------------------------------------*/
// Anim: Move section to the left
/*-------------------------------------------------------------------------*/
function template_sections_expand()
{
var width = parseInt( div_template_sections.style.width ) ? parseInt( div_template_sections.style.width ) : template_section_fwidth;
var new_width = width + 10;
clearTimeout( template_section_anim );
if ( new_width > 100 )
{
new_width = 100;
}
div_template_sections.style.width = new_width + '%';
//------------------------------------------
// Still got some more to go?
//------------------------------------------
if ( new_width < 100 )
{
template_section_anim = setTimeout( 'template_sections_expand()', 5 );
}
}
/*-------------------------------------------------------------------------*/
// Prevent browser bubblin'
/*-------------------------------------------------------------------------*/
function template_cancel_bubble(obj, extra, wobj)
{
if ( ! obj || is_ie)
{
if ( ! wobj )
{
wobj = window;
}
try
{
if ( extra )
{
wobj.event.returnValue = false;
}
wobj.event.cancelBubble = true;
return wobj.event;
}
catch(e) { }
}
else
{
obj.stopPropagation();
if ( extra )
{
obj.preventDefault();
}
return obj;
}
}
/*-------------------------------------------------------------------------*/
// Load template bits for editing
/*-------------------------------------------------------------------------*/
function template_load_bits_to_edit( baseurl )
{
var bits = '';
//------------------------------------------
// Build template bits to edit
//------------------------------------------
for ( var i in bits_clicked )
{
if ( (bits_clicked[i] != "") && (bits_clicked[i] != null) && (bits_clicked != 'undefined') )
{
bits += i + '|';
}
}
//------------------------------------------
// Got owt?
//------------------------------------------
if ( ! bits || bits == '' )
{
return false;
}
template_load_editor( null, null, baseurl+'&bitname=' + bits );
}
/*-------------------------------------------------------------------------*/
// Jump handler
/*-------------------------------------------------------------------------*/
function _template_load_editor_loader( event )
{
if ( is_ie )
{
// OMG. Could not get readyState == 4 to work o_O
// "complete" and COMPLETE didn't work either
// So I resorted to this hack. Too tired to see
// what's really up
ie_rs_count++;
if ( ie_rs_count < 3 )
{
return;
}
ie_rs_count = 0;
}
if ( search_template_bit )
{
template_load_editor( search_template_bit, event );
}
}
/*-------------------------------------------------------------------------*/
// Toggle bit row
/*-------------------------------------------------------------------------*/
function template_toggle_bit_row( bit_name )
{
//------------------------------------------
// Already selected?: YES
//------------------------------------------
if ( bits_clicked[ bit_name ] )
{
window.frames['tb-iframe'].document.getElementById( 'dvb-'+bit_name ).className = class_before;
delete( bits_clicked[ bit_name ] );
}
//------------------------------------------
// Already selected?: NO
//------------------------------------------
else
{
window.frames['tb-iframe'].document.getElementById( 'dvb-'+bit_name ).className = class_after;
bits_clicked[ bit_name ] = 1;
}
}
/*-------------------------------------------------------------------------*/
// Change state image
/*-------------------------------------------------------------------------*/
function _template_change_state_image( tid, img )
{
try
{
window.frames['tb-iframe'].document.getElementById( 'img-item-' + tid ).src = document.getElementById( 'img-' + img ).src;
}
catch( e ) { }
}
/*-------------------------------------------------------------------------*/
// Change revert image
/*-------------------------------------------------------------------------*/
function _template_change_revert_image( tid, img )
{
try
{
window.frames['tb-iframe'].document.getElementById( 'img-remove-' + tid ).src = img;
window.frames['tb-iframe'].document.getElementById( 'img-remove-' + tid ).style.width = img == img_revert_blank ? 1 : img_revert_width + 'px';
window.frames['tb-iframe'].document.getElementById( 'img-remove-' + tid ).style.height = img == img_revert_blank ? 1 : img_revert_height + 'px';
}
catch( e ) { }
}