Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

В некоторых браузерах довольно странно ведёт себя блок "Загрузка" (кнопка подгрузки 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,

Опубликовано:
  • Автор
Ну возьмите код от 3.4

+

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

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

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

Опубликовано:

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

 

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

Начинается с

            Ajax.Responders.register({

Опубликовано:
  • Автор

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

Опубликовано:
  • Автор

"Мигалка" может висеть из-за ошибок. В 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 );
		  }
		});

 

Опубликовано:

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

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

Опубликовано:

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

Обычный javascript для работы хука "(SOS31) Recent Topics"

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

Сейчас на странице 0

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.