Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Trotor

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

Рекомендованные сообщения

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

Поделиться сообщением


Ссылка на сообщение

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

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

Поделиться сообщением


Ссылка на сообщение

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

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

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

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

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();

 

 

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

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

Поделиться сообщением


Ссылка на сообщение

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

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

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

Поделиться сообщением


Ссылка на сообщение

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

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

Поделиться сообщением


Ссылка на сообщение

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

+

после

                method: 'get',

добавьте

                hideLoader: true,

Поделиться сообщением


Ссылка на сообщение
11/08/17 10:22 (изменено)
Ну возьмите код от 3.4

+

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

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

Изменено пользователем Haktar

Поделиться сообщением


Ссылка на сообщение

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

 

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

Начинается с

            Ajax.Responders.register({

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Стесняюсь спросить, а Вы точно скопировали и заменили часть кода из 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?

Поделиться сообщением


Ссылка на сообщение

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

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

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

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

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

 

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

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

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

Поделиться сообщением


Ссылка на сообщение

Вот начало

			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

Поделиться сообщением


Ссылка на сообщение

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

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

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...