Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Haktar

Кнопка Загрузка виснет

Recommended Posts

В некоторых браузерах довольно странно ведёт себя блок "Загрузка" (кнопка подгрузки ajax) - бывает зависает, и долгое время не исчезает. Довольно напрягает. Конечно можно полностью от неё избавиться (шаблон includeVars), но она довольно полезная. Хотелось что бы эта кнопка не зависала, исчезала сразу.

Share this post


Link to post
Share on other sites

И как мы должны воспроизвести проблему?

Нужен четкий алгоритм.

Share this post


Link to post
Share on other sites

И как мы должны воспроизвести проблему?

Нужен четкий алгоритм.

Да, понимаю, слишком не чётко описал проблему.

Вот скриншот представляю:

post-31497-0-64556900-1510038380_thumb.jpg

 

В старых браузерах этой проблемы нет, а вот в новых появляется. Грешу на старый скрипт, который идёт от хука последних сообщений в темах. Вот он:

 

var _recentTopics = window.IPBoard;

_recentTopics.prototype.recentTopics = {
ajaxHandler: '',
updateInterval: '',

init: function()
{
	document.observe( 'dom:loaded', function()
	{
		$( 'hook_recentTopics' ).select( '.toggle' )[0].observe( 'click', ipb.recentTopics.toggleVisibility );	

           ipb.recentTopics.ajaxHandler = new Ajax.PassivePeriodicalUpdater( 'recentTopics', ipb.vars['base_url'] + "app=forums&module=ajax&section=recentTopics&secure_key=" + ipb.vars['secure_hash'],
           {
               method: 'get',
               frequency: ipb.recentTopics.updateInterval,
               decay: 2,
               evalJSON: 'force'
           });

		if( ipb.Cookie.get('toggleRecentTopics') == 1 )
		{	
			$( 'recentTopics' ).hide();
			$( 'hook_recentTopics' ).addClassName( 'collapsed' );
			ipb.recentTopics.ajaxHandler.stop();
		}

		ipb.recentTopics.initPreview();
	});
},

toggleVisibility: function( e )
{
	if( ipb.board.animating ){ return false; }

	Debug.write( 'collapsing' );

	var click = Event.element(e);
	var remove = $A();
	var wrapper = $( click ).up( 'div#recentTopicsWrapper' ).down( 'div#recentTopics' );
	Debug.write( wrapper );
	var catname = $( click ).up( 'h3' );

	ipb.board.animating = true;

	// Get cookie
	var cookie = ipb.Cookie.get( 'toggleRecentTopics' );
	if( cookie == null ){
		cookie = $A();
	} 

	Effect.toggle( wrapper, 'blind', {duration: 0.4, afterFinish: function(){ ipb.board.animating = false; } } );

	if( catname.hasClassName( 'collapsed' ) )
	{
		catname.removeClassName( 'collapsed' );
		ipb.Cookie.set('toggleRecentTopics', "0", 1);

		ipb.recentTopics.ajaxHandler.start();
	}
	else
	{
		new Effect.Morph( $(catname), {style: 'collapsed', duration: 0.4, afterFinish: function(){
			$( catname ).addClassName('collapsed');
			ipb.board.animating = false;
		} });
		ipb.Cookie.set('toggleRecentTopics', "1", 1);

		ipb.recentTopics.ajaxHandler.stop();
	}


	Event.stop( e );
},

initPreview: function()
{
	Debug.write( "Init preview called" );
	// Fix up topic preview
	$$('.__topic').each( function(i){
		Debug.write( "Watching " + $(i).id );
		$(i).observe('mouseover', function(e){
			ipb.global.topicPreviewShowIcon(e);
		});
		$(i).observe('mouseout', function(e){
			ipb.global.topicPreviewHideIcon(e);
		});

		ipb.global.topicPreviewSetUp(i);
	});
}
};

//------------------------------
// @author: adrianscott
// http://www.fluther.com/disc/9117/ajaxperiodicalupdater-only-update-if-the-content-has-changed/#quip58902
//------------------------------
Ajax.PassivePeriodicalUpdater = Class.create(Ajax.Base, 
{
initialize: function($super, container, url, options) 
{
	$super(options);
	this.onComplete = this.options.onComplete;

	this.frequency = this.options.frequency;
	this.decay = this.options.decay;

	this.updater = { };
	this.container = $(container);
	this.url = url;
	this.runnedOnce = 0;
	this.lastTidTimestamp = '';

	this.start();
},

start: function() 
{
	this.options.onComplete = this.updateComplete.bind(this);
	this.onTimerEvent();
},

stop: function() 
{
	this.updater.options.onComplete = undefined;
	clearTimeout(this.timer);
	(this.onComplete || Prototype.emptyFunction).apply(this, arguments);
},

updateComplete: function(t) 
{
	if (t.responseJSON['last_tid_timestamp'] == this.lastTidTimestamp ) 
	{
		this.decay = this.decay * this.options.decay;
	} 
	else 
	{
		this.decay = this.options.decay;
		this.container.update( t.responseJSON['html'] );
		this.lastTidTimestamp = t.responseJSON['last_tid_timestamp']; 

		if ( this.runnedOnce == 1 )
		{
			Effect.Pulsate( this.container, { pulses: 3, duration: 1.5 } );
		}

		this.runnedOnce = 1;
	}

	ipb.recentTopics.initPreview();

	this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
},

onTimerEvent: function() {
	this.updater = new Ajax.Request(this.url, this.options);
}
});

ipb.recentTopics.init();

 

 

Можно как это исправить, а ещё лучше - отключить в этом скрипте эту мигалку?

Share this post


Link to post
Share on other sites

Можно посмотреть, как сделано в 3.4. Там, чтобы не показывать "мигалку", используется специальный параметр.

Share this post


Link to post
Share on other sites

Можно посмотреть, как сделано в 3.4. Там, чтобы не показывать "мигалку", используется специальный параметр.

Так я не хочу избавляться от "мигалки", мне бы этот скрипт починить что бы он нормально срабатывал в последних версиях браузеров :(

Share this post


Link to post
Share on other sites

Так я не хочу избавляться от "мигалки", мне бы этот скрипт починить что бы он нормально срабатывал в последних версиях браузеров

Как так?! Если

а ещё лучше - отключить в этом скрипте эту мигалку?

Share this post


Link to post
Share on other sites

Как так?! Если

Просто хочу её отключить именно в этом хуке а не по всему форуму. Как я понял её отключить можно в этом скрипте, но не могу найти где именно.

Share this post


Link to post
Share on other sites

Ну возьмите код от 3.4

+

после

                method: 'get',

добавьте

                hideLoader: true,

Share this post


Link to post
Share on other sites
Ну возьмите код от 3.4

+

после                 method: 'get',добавьте                 hideLoader: true,

На жаль не помогло. Значит дело не в скрипте...

Edited by Haktar

Share this post


Link to post
Share on other sites

На жаль не помогло. Значит дело не в скрипте...

 

Стесняюсь спросить, а Вы точно скопировали и заменили часть кода из public/js/ipb.js?

Начинается с

            Ajax.Responders.register({

  • Upvote 1

Share this post


Link to post
Share on other sites

Стесняюсь спросить, а Вы точно скопировали и заменили часть кода из public/js/ipb.js?

Начинается с

Ээээ, не понял что нужно сделать.

 

Взять код из 3.4, из файла ipb.js, вот этот:

 

			Ajax.Responders.register({
		  onLoading: function( handler ) {
			if( !Object.isUndefined( handler['options']['hideLoader'] ) && handler['options']['hideLoader'] != false ){
				return;
			}

		    if( !$('ajax_loading') ){
				if( !ipb.templates['ajax_loading'] ){ return; }
				$('ipboard_body').insert( ipb.templates['ajax_loading'] );
			}

			var effect = new Effect.Appear( $('ajax_loading'), { duration: 0.2 } );
		  },

 

 

И заменить его на аналогичный в 3.1.4?

Share this post


Link to post
Share on other sites

Взять код из 3.4, из файла ipb.js, вот этот:

Это только часть. Берите больше. Не стесняйтесь.

"Мигалка" может висеть из-за ошибок. В 3.4 это предусмотрено.

  • Upvote 1

Share this post


Link to post
Share on other sites

"Мигалка" может висеть из-за ошибок. В 3.4 это предусмотрено.

Заменил эту часть - и о чудо - мигалка не зависает. Спасибо за помощь.

 

Это только часть. Берите больше. Не стесняйтесь.

Можно заменить и большую часть? Проблем не будет совместимости?

А до какого текста заменять?

Share this post


Link to post
Share on other sites

Вот начало

			Ajax.Responders.register({

Вот конец

			});

 

 

			Ajax.Responders.register({
		  onLoading: function( handler ) {
			if( !Object.isUndefined( handler['options']['hideLoader'] ) && handler['options']['hideLoader'] != false ){
				return;
			}

		    if( !$('ajax_loading') ){
				if( !ipb.templates['ajax_loading'] ){ return; }
				$('ipboard_body').insert( ipb.templates['ajax_loading'] );
			}

			var effect = new Effect.Appear( $('ajax_loading'), { duration: 0.2 } );
		  },
		  onComplete: function() {

			if( !$('ajax_loading') || !$('ajax_loading').visible() ){ return; }
		    var effect = new Effect.Fade( $('ajax_loading'), { duration: 0.2 } );

		    if ( ! Object.isUndefined( ipb.hoverCard ) ){
		    	ipb.hoverCardRegister.postAjaxInit();
			}
		  },
		  onSuccess: function() {
		    if ( ! Object.isUndefined( ipb.hoverCard ) ){
		    	ipb.hoverCardRegister.postAjaxInit();
			}
		  },
		  onFailure: function( t )
		  {
			 if( !$('ajax_loading') || !$('ajax_loading').visible() ){ return; }
			 var effect = new Effect.Fade( $('ajax_loading'), { duration: 0.2 } );

		  },
		  onException: function( t, exception )
		  {
			  if( !$('ajax_loading') || !$('ajax_loading').visible() ){ return; }
			  var effect = new Effect.Fade( $('ajax_loading'), { duration: 0.2 } );

			  Debug.error( exception );
		  }
		});

 

  • Upvote 1

Share this post


Link to post
Share on other sites

скрипт, который идёт от хука последних сообщений в темах.

А что за скрипт такой?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...