⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vbulletin_quick_edit.js

📁 linuxSir 网站的精华文章
💻 JS
字号:
/*======================================================================*\|| #################################################################### |||| # vBulletin 3.5.3|| # ---------------------------------------------------------------- # |||| # Copyright ?000-2006 Jelsoft Enterprises Ltd. All Rights Reserved. |||| # This file may not be redistributed in whole or significant part. # |||| # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # |||| # http://www.vbulletin.com | http://www.vbulletin.com/license.html # |||| #################################################################### ||\*======================================================================*//*** Initialize AJAX post editing** @param	mixed	ID of element (or actual element) containing postbits*/function vB_AJAX_QuickEdit_Init(postobj){	if (AJAX_Compatible)	{		if (typeof postobj == 'string')		{			postobj = fetch_object(postobj);		}		var anchors = fetch_tags(postobj, 'a');		var postid = 0;		for (var i = 0; i < anchors.length; i++)		{			if (anchors[i].name && anchors[i].name.indexOf('vB::QuickEdit::') != -1)			{				anchors[i].onclick = vB_AJAX_QuickEditor_Events.prototype.editbutton_click;			}		}	}}// #############################################################################// vB_AJAX_QuickEditor// #############################################################################/*** Class to allow quick editing of posts within postbit via AJAX*/function vB_AJAX_QuickEditor(){	this.postid = null;	this.messageobj = null;	this.container = null;	this.originalhtml = null;	this.ajax = null;	this.editstate = false;	this.editorcounter = 0;	this.pending = false;}// =============================================================================// vB_AJAX_QuickEditor methods/*** Check if the AJAX system is ready for us to proceed** @return	boolean*/vB_AJAX_QuickEditor.prototype.ready = function(){	if (this.editstate || this.pending)	{		return false;	}	else	{		return true;	}};/*** Prepare to edit a single post** @param	string	Name attribute of clicked link - takes the form of 'vB::QuickEdit::$postid'** @return	boolean	false*/vB_AJAX_QuickEditor.prototype.edit = function(anchor_name){	var test_ajax = new vB_AJAX_Handler(true);	if (!test_ajax.init() || (typeof vb_disable_ajax != 'undefined' && vb_disable_ajax > 0))	{		// couldn't initialize, return true to allow click to go through		return true;	}	var tmppostid = anchor_name.substr(anchor_name.lastIndexOf('::') + 2);	if (this.pending)	{		// something is waiting to complete		return false;	}	else if (!this.ready())	{		if (this.postid == tmppostid)		{			this.full_edit();			return false;		}		this.abort();	}	this.editorcounter++;	this.editorid = 'vB_Editor_QE_' + this.editorcounter;	this.postid = tmppostid;	this.messageobj = fetch_object('post_message_' + this.postid);	this.originalhtml = this.messageobj.innerHTML;	this.unchanged = null;	this.fetch_editor();	this.editstate = true;	return false;};/*** Send an AJAX request to fetch the editor HTML*/vB_AJAX_QuickEditor.prototype.fetch_editor = function(){	this.ajax = new vB_AJAX_Handler(true);	this.ajax.onreadystatechange(this.display_editor);	this.ajax.send('ajax.php', 'do=quickedit&p=' + this.postid + '&editorid=' + PHP.urlencode(this.editorid));	this.pending = true;};/*** Display the editor HTML when AJAX says fetch_editor() is ready*/vB_AJAX_QuickEditor.prototype.display_editor = function(){	var AJAX = vB_QuickEditor.ajax.handler;	if (AJAX.readyState == 4 && AJAX.status == 200)	{		vB_QuickEditor.pending = false;		if (AJAX.responseText == 'disabled')		{			// this will fire if quick edit has been disabled after the showthread page is loaded			window.location = 'editpost.php?' + SESSIONURL + 'do=editpost&postid=' + vB_QuickEditor.postid;		}		else		{			var editor = fetch_tags(AJAX.responseXML, 'editor')[0];			// display the editor			vB_QuickEditor.messageobj.innerHTML = editor.firstChild.nodeValue;			// initialize the editor			vB_Editor[vB_QuickEditor.editorid] = new vB_Text_Editor(				vB_QuickEditor.editorid,				editor.getAttribute('mode'),				editor.getAttribute('parsetype'),				editor.getAttribute('parsesmilies')			);			if (fetch_object(vB_QuickEditor.editorid + '_editor') && fetch_object(vB_QuickEditor.editorid + '_editor').scrollIntoView)			{				fetch_object(vB_QuickEditor.editorid + '_editor').scrollIntoView(!is_moz);			}			vB_Editor[vB_QuickEditor.editorid].editbox.style.width = '100%';			vB_Editor[vB_QuickEditor.editorid].check_focus();			vB_QuickEditor.unchanged = vB_Editor[vB_QuickEditor.editorid].get_editor_contents();			fetch_object(vB_QuickEditor.editorid + '_save').onclick = vB_QuickEditor.save;			fetch_object(vB_QuickEditor.editorid + '_abort').onclick = vB_QuickEditor.abort;			fetch_object(vB_QuickEditor.editorid + '_adv').onclick = vB_QuickEditor.full_edit;			var delbutton = fetch_object(vB_QuickEditor.editorid + '_delete');			if (delbutton)			{				delbutton.onclick = vB_QuickEditor.show_delete;			}		}		if (is_ie)		{			AJAX.abort();		}	}};/*** Destroy the editor, and use the specified text as the post contents** @param	string	Text of post*/vB_AJAX_QuickEditor.prototype.restore = function(post_html, type){	this.hide_errors(true);	if (this.editorid && vB_Editor[this.editorid] && vB_Editor[this.editorid].initialized)	{		vB_Editor[this.editorid].destroy();	}	if (type == 'tableobj')	{		fetch_object('edit' + this.postid).innerHTML = post_html;	}	else	{		this.messageobj.innerHTML = post_html;	}	this.editstate = false;};/*** Cancel the post edit and restore everything to how it started** @param	event	Event object*/vB_AJAX_QuickEditor.prototype.abort = function(e){	vB_QuickEditor.restore(vB_QuickEditor.originalhtml, 'messageobj');};/*** Pass the edits along to the full editpost.php interface** @param	event	Event object*/vB_AJAX_QuickEditor.prototype.full_edit = function(e){	var form = new vB_Hidden_Form('editpost.php');	form.add_input('do', 'updatepost');	form.add_input('s', fetch_sessionhash());	form.add_input('ajax', 1);	form.add_input('advanced', 1);	// Don't preview - see editpost.php if you want to know why	//form.add_input('preview', 'Yes');	form.add_input('postid', vB_QuickEditor.postid);	form.add_input('wysiwyg', vB_Editor[vB_QuickEditor.editorid].wysiwyg_mode);	form.add_input('message', vB_Editor[vB_QuickEditor.editorid].get_editor_contents());	form.submit_form();}/*** Save the edited post via AJAX** @param	event	Event object*/vB_AJAX_QuickEditor.prototype.save = function(e){	var newtext = vB_Editor[vB_QuickEditor.editorid].get_editor_contents();	if (newtext == vB_QuickEditor.unchanged)	{		vB_QuickEditor.abort(e);	}	else	{		pc_obj = fetch_object('postcount' + vB_QuickEditor.postid);		vB_QuickEditor.ajax = new vB_AJAX_Handler(true);		vB_QuickEditor.ajax.onreadystatechange(vB_QuickEditor.update);		vB_QuickEditor.ajax.send('editpost.php',			'do=updatepost&ajax=1&postid='			+ vB_QuickEditor.postid			+ '&wysiwyg=' + vB_Editor[vB_QuickEditor.editorid].wysiwyg_mode			+ '&message=' + PHP.urlencode(newtext)			+ (pc_obj != null ? '&postcount=' + PHP.urlencode(pc_obj.name) : '')		);		vB_QuickEditor.pending = true;	}};/*** Show the delete dialog*/vB_AJAX_QuickEditor.prototype.show_delete = function(){	vB_QuickEditor.deletedialog = fetch_object('quickedit_delete');	if (vB_QuickEditor.deletedialog)	{		vB_QuickEditor.deletedialog.style.display = '';		vB_QuickEditor.deletebutton = fetch_object('quickedit_dodelete');		vB_QuickEditor.deletebutton.onclick = vB_QuickEditor.delete_post;		// don't do this stuff for browsers that don't have any defined events		// to detect changed radio buttons with keyboard navigation		if (!is_opera && !is_saf)		{			vB_QuickEditor.deletebutton.disabled = true;			vB_QuickEditor.deleteoptions = new Array();			vB_QuickEditor.deleteoptions['leave'] = fetch_object('rb_del_leave');			vB_QuickEditor.deleteoptions['soft'] = fetch_object('rb_del_soft');			vB_QuickEditor.deleteoptions['hard'] = fetch_object('rb_del_hard');			for (var i in vB_QuickEditor.deleteoptions)			{				if (vB_QuickEditor.deleteoptions[i])				{					vB_QuickEditor.deleteoptions[i].onclick = vB_QuickEditor.deleteoptions[i].onchange = vB_AJAX_QuickEditor_Events.prototype.delete_button_handler;				}			}		}	}};/*** Run the delete system*/vB_AJAX_QuickEditor.prototype.delete_post = function(){	var dontdelete = fetch_object('rb_del_leave');	if (dontdelete && dontdelete.checked)	{		vB_QuickEditor.abort();		return;	}	var form = new vB_Hidden_Form('editpost.php');	form.add_input('do', 'deletepost');	form.add_input('s', fetch_sessionhash());	form.add_input('postid', vB_QuickEditor.postid);	form.add_inputs_from_object(vB_QuickEditor.deletedialog);	form.submit_form();};/*** Check for errors etc. and initialize restore when AJAX says save() is complete** @return	boolean	false*/vB_AJAX_QuickEditor.prototype.update = function(){	var AJAX = vB_QuickEditor.ajax.handler;	if (AJAX.readyState == 4 && AJAX.status == 200)	{		vB_QuickEditor.pending = false;		var output = AJAX.responseText;		// this is the nice error handler, of which Safari makes a mess		var errstart = output.indexOf('<!--POSTERROR');		if (errstart != -1)		{			var errstop = output.indexOf('<!--/POSTERROR');			if (errstop != -1)			{				vB_QuickEditor.show_errors(output.substr(errstart, (errstop - errstart)));				if (is_ie)				{					AJAX.abort();				}				return false;			}		}		vB_QuickEditor.restore(output, 'tableobj');		PostBit_Init(fetch_object('post' + vB_QuickEditor.postid));		if (is_ie)		{			AJAX.abort();		}	}	return false;};/*** Pop up a window showing errors** @param	string	Error HTML*/vB_AJAX_QuickEditor.prototype.show_errors = function(errortext){	fetch_object('ajax_post_errors_message').innerHTML = errortext;	var errortable = fetch_object('ajax_post_errors');	errortable.style.width = '400px';	errortable.style.zIndex = 500;	var measurer = (is_saf ? 'body' : 'documentElement');	errortable.style.left = (is_ie ? document.documentElement.clientWidth : self.innerWidth) / 2 - 200 + document[measurer].scrollLeft + 'px';	errortable.style.top = (is_ie ? document.documentElement.clientHeight : self.innerHeight) / 2 - 150 + document[measurer].scrollTop + 'px';	errortable.style.display = '';};/*** Hide the error window*/vB_AJAX_QuickEditor.prototype.hide_errors = function(skip_focus_check){	this.errors = false;	fetch_object('ajax_post_errors').style.display = 'none';	if (skip_focus_check != true)	{		vB_Editor[this.editorid].check_focus();	}};// =============================================================================// vB_AJAX_QuickEditor Event Handlers/*** Class to handle quick editor events*/function vB_AJAX_QuickEditor_Events(){}/*** Handles clicks on edit buttons of postbits*/vB_AJAX_QuickEditor_Events.prototype.editbutton_click = function(e){	return vB_QuickEditor.edit(this.name);};/*** Handles manipulation of form elements in the delete section*/vB_AJAX_QuickEditor_Events.prototype.delete_button_handler = function(e){	if (this.id == 'rb_del_leave' && this.checked)	{		vB_QuickEditor.deletebutton.disabled = true;	}	else	{		vB_QuickEditor.deletebutton.disabled = false;	}}// #############################################################################// initialize the editor classvar vB_QuickEditor = new vB_AJAX_QuickEditor();/*======================================================================*\|| ####################################################################|| # Downloaded: 14:56, Sun Feb 19th 2006|| # CVS: $RCSfile: vbulletin_quick_edit.js,v $ - $Revision: 1.39.2.1 $|| ####################################################################\*======================================================================*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -