Единый форум поддержки

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Единый форум поддержки » Новые возможности форумов » Скрипты от пользователей 3


Скрипты от пользователей 3

Сообщений 441 страница 460 из 507

1

Администрация MyBB не гарантирует работоспособность данных скриптов, вы ставите их на свой страх и риск.

Для тех кто выкладывает скрипты:
1) Дайте краткое описание скрипта.
2) Обязательно укажите куда его вставлять.
3) Сам скрипт вставьте в bb-коды [сode] [/сode] или в [quotе] [/quotе]


В данной теме запрещено задавать вопросы и просить скрипты. Для этого есть раздел  Запросы по скриптам[8], при нарушение данного правила будет выдаваться предупреждение в профиль.


+5

441

Seiline написал(а):

Сейчас на некоторых  форумах есть такая фишка как запрет на редактирование первого сообщения в теме.
ТО есть тема открыта, все сообщения в ней можно редактировать или создавать новые автору, но вот свое первое сообщение в теме автор не может редактировать - только модераторы и админы.

Запрет редактирования постов в некоторых форумах
Проставляется по группам для каждого форума

В HTML верх:

<!-- Запрет редактирования постов в определенных форумах -->
<script type="text/javascript">
/* Запрет редактирования первого поста */
var FirstPost_NoEdit = {
//ID форума  //Группы с запретом

  22:    [4,6,7],
  14:    [4,5,6]  //!Последний элемент без запятой

}
var DisallowOnlyFirst =
1 ; // Запрет редактирования: 0 - всех постов, 1 - только первых постов
</script><style id="HideEdit1">.post .pl-edit,#pun-edit #post{display:none!important}</style>
<script type="text/javascript" src="http://forumfiles.ru/files/0015/c4/3f/81542.js"></script>


Установки:

Синим - ID форума, красным - номера групп, которым запрещаем редактирование в данном форуме


DisallowOnlyFirst  - Запрет редактирования: 0 - всех постов, 1 - только первых постов
Т.е если хотим запретить редактирование только первого поста темы - ставим 1, если всех постов - ставим 0

Тестируем, отписываемся

+2

442

Часто бывает нужно отключить простановку оценок                                           
в некоторых форумах (или темах) определенным пользователям или группам,
Для возможности гибкой настройки отключений написал такой скрипт:           

Запрет простановки репутации(оценки поста) в некоторых форумахС расширенными настройками
В HTML верх

<!-- Запрет простановки репутации(оценки поста) в некоторых форумах -->
<script type="text/javascript" src="http://forumfiles.ru/files/0015/c4/3f/98416.js"></script>
<script>
  DisallowRespect('|
f2:g4,5; -f1:12; t33 |',100);
</script>


Установки:

DisallowRespect('| f2:g4,5; -f1:12; t33 |',100);

Выделенное красным - настройки запрета по темам/форумам и группам/пользователям,-
f2  - форум с ID = 2;
t33  - тема с ID = 33;
Если хотим отключить только минусы, - ставим - перед идентификатором:  -f1
После двоеточия : прописываем группы и ID пользователей с запретом
(Если хотим запретить репутацию для всех - ничего не прописываем)
g4  - группа с ID = 4 (все пользователи группы)
5  - пользователь с ID = 5
Записи разделяем точкой с запятой ; , как указано в примере

Выделенное синим - минимальное количество постов для снятия запрета,
Если у пользователя постов больше - запрет отключается! (Параметр необязательный, можно удалить)


Данную строку можно размножать, если хотим установить запреты на разное количество сообщений

Тестируем, отписываемся

+3

443

Давно обещал сделать возможность ограничения                                                                   
редактирования и удаления по времени, без привязки к cookies и повышенной защитой,
В связи с обновлением на сервисе появилась возможность написать такой скрипт:           

Ограничение возможности редактирования и удаления
      по времени
  V.2
http://sa.uploads.ru/qSUPE.png


- Вариант реализации не привязан к Cookies, - работает с любого браузера/компьютера
- Ограничения от скрипта обойти невозможно, даже отключив JavaScript (с отключенным JS в браузере форма не отправится)
- Есть возможность задавать ограничения отдельно на редактирование и удаление


В HTML верх

<!-- Ограничение редактирования/удаления по времени -->
<script type="text/javascript">
var timeLimits = {};     // => ограничения по времени - в минутах
//===========================//
timeLimits.edit_time     =
120;  // время редактирования (макс.3600)
timeLimits.edit_groups   = [
4,5,6];  // группы с ограничением редактирования

timeLimits.delete_time   =
90;  // время удаления (макс.3600)
timeLimits.delete_groups = [
4,5,6,7];  // группы с ограничением удаления

timeLimits.no_limit_id   = [
342,608];  // пользователи со снятием ограничений
//===========================//
</script><script src="http://forumfiles.ru/files/0015/c4/3f/24801.js"></script>
<style id="hide_edit01">li.pl-edit,li.pl-delete{display:none!important}</style>
<style id="hide_edit02">#pun-edit #post,#pun-delete form{display:none}</style>
<script type="text/javascript">timeLimits.enable()</script>


Установки:

Все ограничения устанавливаются в минутах!


timeLimits.edit_time  - время, в течение которого можно отредактировать пост (макс. 3600)
timeLimits.edit_groups  - номера групп, на которые действует ограничение редактирования (через запятую)

timeLimits.delete_time  - время, в течение которого можно удалить пост (макс. 3600)
timeLimits.delete_groups  - номера групп, на которые действует ограничение удаления (через запятую)

timeLimits.no_limit_id  - ID пользователей (в группах с ограничениями), для которых ограничения снимаются


Если нужно отключить какое-либо из ограничений - можно прописать значение времени, равное -1, либо оставить пустым массив с ID групп для данного ограничения.

+4

444

toxygen написал(а):

Мне нужно, чтобы тема форума была указана над каждым комментарием в этой теме, а не только время.

Добавка ссылки на тему(с названием) к заголовку постаhttp://sf.uploads.ru/Nwhx1.png
В HTML низ

<script><!--Добавка ссылки на тему к заголовку поста-->
if($(".punbb").attr("id")=="pun-viewtopic"){
  var s0=$("link[rel='alternate']").attr("href").replace(/^.*id=(\d+)$/igm,"$1");
  var s1="/viewtopic.php?id="+s0;var s2=$(".main h1 span").text();
  var s3='<div class="TopicLnk" style="font-weight:bold">Re: <a href="';
  s3+=s1+'">'+s2+'</a></div>';$(".post h3>span").each(function(){
  if($(this).parents(".post").hasClass("topicpost")){$(this).prepend(s3.replace("Re: ",""));
  }else{$(this).prepend(s3);};});}
</script>

+5

445

Вариант оформления регулятора шрифта с картинками заменен на новый,
в связи с изъятием графики для предыдущего из публичного использования по обращению правообладателя
http://funkyimg.com/i/2itw8.png


Спасибо Lidia-Lada за реализацию графики для нового варианта оформления!

+2

446

Смена аватара в топике(Для текущего юзера, - форма появляется по клику на аватар в посте)Идея Deff, реализация Deff, Alex_63http://s3.uploads.ru/t9Rus.png
В HTML верх

<!-- Смена аватара в топике (в HTML верх) © Deff, Alex_63 -->
<link rel="stylesheet" type="text/css" href="http://forumfiles.ru/files/0015/c4/3f/67168.css" />
<script type="text/javascript" src="http://forumfiles.ru/files/0015/c4/3f/67169.js"></script>


Дополнение: Запрет загрузки/изменения аватарки для некоторых пользователей (к примеру, для пиар-аккаунта)
Ставим в HTML верх перед скриптом Смены аватара:

<!-- Запрет изменения аватарки --><script type="text/javascript">
var NoChangeAvatar = ['
ban1', 'ban2']; //Пользователи с запретом изменения аватарки
</script>

Вместо красного - вводим нужные ники (которым будет запрещено менять аватар), в одинарных кавычках через запятую.

+6

447

Модераторские теги
Поправлен стиль оформления
(для возможности вставки длинного текста в модераторские предупреждения,
- поправлена корректность отображения)


Скриншот:
http://se.uploads.ru/UZDAM.jpg

+4

448

Дополнение к скрипту "Смена аватара в топике"
Смена аватара по клику на иконку© Deffhttp://sf.uploads.ru/3JALs.png
В HTML низ:

<style>
.post-author img.clk-imag{
  cursor:pointer;
  display:block;
  position:absolute;
  z-index:1000;
  margin-top:
-33px;  /*Наезд на Авик снизу*/
  margin-left:
-27px; /* Сдвиг левее */
}
</style>

<script>
$(document).ready(function(){
var img_click = "
http://funkyimg.com/i/2jFxE.png"; //Ccылка на картинку;
$('.pa-avatar img[title="Сменить аватар"]').parents('.pa-avatar').after('<img  class="clk-imag" src="'+img_click+'" title="Cменить аватар?"/>');
$('.pa-avatar+.clk-imag').click(function(){$(this).prev('.pa-avatar').find('img[alt][title="Сменить аватар"]').click()});});
</script>

+4

449

Запрет просмотра профилей ГостемНовый вариант, с защитой от отключения JavaScripthttp://se.uploads.ru/S345b.png
В HTML верх:

<!-- Скрываем профиль от гостей -->
<style id="HideProfile">.gid3 #pun-profile .main{display:none}</style>
<script type="text/javascript">
if(self==top&&GroupID==3&&$('#pun-profile').length)$().pun_mainReady(function(){
var s='Информация',s1=$('#pun-title h1>span').text();document.title=s1;
var L=' »&nbsp;<a href="/">'+s1+'</a> »&nbsp;'+s;$('.crumbs').html(L);
$().pun_aboutReady(function(){$('#pun-crumbs2>.crumbs').html(L);});
$('#pun-main').html('<h1><span>'+s+'</span></h1><div class=info>\
<div class=container>Вы не имеете прав для доступа к этой странице.\
</div></div>');$('style#HideProfile').remove();});
</script>

+2

450

Мультитрековый плеер в постах (плеер с плейлситом) v1.0
http://sg.uploads.ru/tFc1X.gif
Музыка в постах

+5

451

Радио с плейлистом
http://s6.uploads.ru/tC25j.gif
Радио на форум (HTML5)

+2

452

Может кому пригодится...

Инструментарий для создания оглавления на литературных форумах

У всех пользователей, в темах созданных (либо еще только создаваемых) ими, отображается новая кнопка (у модераторов и прочей администрации она присутствует всегда). Кнопка позволяет выделить фрагмент поста, дать ему название (или оставить безымянным) и занести в оглавление.
http://s8.uploads.ru/t/lkp6d.png

Оглавление создается автоматически при выделении первого фрагмента.
Когда оглавление создано, оно выводится в блоке над сообщениями темы. В оглавлении выводятся названия фрагментов (если они есть, иначе ссылка будет названа, как "Фрагмент") и дата их добавления по московскому времени. Так же, новые, для каждого конкретного пользователя, фрагменты подсвечиваются значком (new).
http://s0.uploads.ru/t/sF3Xe.png

Под каждым сообщением с включенным в оглавление фрагментом, либо блоком сообщений (неименованные фрагменты идущие друг за другом), находится панель навигации, которая, как я надеюсь, интуитивно понятна.
http://s5.uploads.ru/t/F73JU.png


CSS:

Код:
#button-fragment{background:url(http://sa.uploads.ru/kl9Aw.png) no-repeat;}

.chapters-box
{
	height: 15em;
	overflow: auto;
}

#chapters
{
	width: 40em;
	margin: auto;
	padding-bottom: 1em;
}

.chapt .fragment-name
{
	display: block;
    padding-top: 0.7em;
    font-size: 1.3em;
    font-weight: bold;	
    font-style: normal;
	text-align: center;
    margin: 0;	
}

#chpt td
{
	border: none !important;
    padding: 0.5em 0 0 0;
}
.mrk
{
	width:1em;
	text-align: center;
}
.newc
{
	width:5em;
}

.new_chp
{
	background-color: #ca050f;
	border-radius: 10px;
	font-weight: bold;
	color: #ffe78a;
}

.chp_name
{
    font-size: 1.1em;
    font-weight: 600;
    font-style: normal;
}

.fragment
{
	border: 1px solid;
	border-color: #fff #ccc #ccc #fff;
	margin: 0.4em 1.8em 1.4em 1.8em;
	padding: 1em;
	background-color: #fff9e7;
}

.fragment h4
{
	display: block;
    padding-bottom: 0.7em;
    font-size: 1.3em;
    font-weight: bold;
    font-style: normal;
	text-align: center;
    margin: 0;
}

.fragment-navigation 
{
	border-top: 1px solid #ccc;
}

.fragment-navigation ul
{
	margin: 0;
    padding: 4px;
	text-align: center;
}

.fragment-navigation ul li
{
	display: inline;
    margin-right: 5px; 
    padding: 3px;
}

В html-низ
JS

Код:
<script type="text/javascript">
//извлеч гостевой ForumAPITicket и вставить вручную
//Посмотреть его можно выйдя из учетной записи и открыв Sources (в хроме)(правой кнопкой мыши->посмотреть код->вкладка Sources->в списке слева выбрать текущую страницу->найти ForumAPITicket)
GuestAPITicket='3f29aad94e883b9c00f7227d6a2fa700bd934768'; 

function NameTit() 
{
	var fname=prompt('Введите название главы!\n(Оставить пустым, если фрагмент не имеет названия)');
	return (fname ? '[fragment=\"'+fname+'\"]':'[fragment]');
}

//Отправка оглавления через фрейм
$.postFrame = function(lnk,data) {
   var rnd = Math.random().toString().substr(6);
   $('<iframe src="about:blank" name="MyFrame_'+rnd+'" id="MyFrame_'+rnd+'"></iframe>').appendTo("head");
   var form = $('<form action="'+lnk+'" target="MyFrame_'+rnd+'" method="post"></form>');
   var kk, vk;
   if(data)  for(var inf in data){
	   vk=data[inf];
	 kk='<input name="'+inf+'" id="'+inf+'" value=\''+vk+'\' type="hidden" />';
     form.append(kk);
   }
 	
   setTimeout(function(){ //Отправляем 
     form.submit();
   },50);
   $('#MyFrame_'+rnd).on('load',function() {
     if($.trim($(this).contents().html()).length>0)$(this).remove()
   });
};

//Формат даты
$.chTime = function(time) 
{
	var ctime = new Date();
	ctime.setTime(parseInt(time)*1000);
	return (ctime.getDate()<10 ? "0" : "")+ctime.getDate()+"."+(ctime.getMonth()<9 ? "0" : "")+(ctime.getMonth()+1)+"."+ctime.getFullYear()+" "+ctime.toTimeString().replace(/ .+$/img, "");
}

//Проверка и замена тега оглавления
var s='</p>',
	e='<p>',
	//c=$(this).html(),
	x,
	m,
	end='<span class="fragment-inner">$1</span></div>';
  
x=s+'<div class="fragment"><h4 class="fragment-name">$1</h4><span class="fragment-inner">$2</span></div>'+e;
m=s+'<div class="fragment">'+end+e;

$('.post').find('.post-content:contains("[fragment=")').map(function() {
	var c=$(this).html();
	c=c.replace(/\n/mgi,'');

	try
	{
c=c.replace(/\[fragment=\"(.*?)\"\](.*?)\[\/fragment\]/mgi,x);
	} catch(e){}

	c=c.replace(/<p><\/p>/mgi,'');
	$(this).html(c);
});

$('.post').find('.post-content:contains("[fragment]")').map(function() {
	var c=$(this).html();
	c=c.replace(/\n/mgi,'');

	try
	{
c=c.replace(/\[fragment\](.*?)\[\/fragment\]/mgi,m);
	} catch(e){}

	c=c.replace(/<p><\/p>/mgi,'');
	$(this).html(c);
});


var punv = $('#pun-viewtopic').length,
	punp = $('#pun-post').length,
	pune = $('#pun-edit').length;
	
//Если в просмотре, отправке или редактировании сообщений
if(punv || punp || pune)(function() {
  var tl0='Фрагмент';  
  var t0 = '<td id="button-fragment" style="cursor: pointer !important;"><img src="i/blank.gif" title="'+tl0+'" onclick="bbcode(NameTit(),\'[/fragment]\');"></td>';
  var tid; 
  var this_author=false;
  var last_rev, tmplr;
  var this_chapter;
  
  //Если в просмотре темы, то вставить оглавление
  if(punv || pune)
  {
	  tid=(punv ? document.URL.split("id=")[1].split("#")[0].split("&p=")[0] : $("#pun-crumbs1").find("a:last").attr("href").split("id=")[1]);
	  
	  //запрос оглавления
	  this_chapter = JSON.parse($.ajax({
url: 'http://www.en.'+location.hostname.replace(/^www\./,'')+"/api.php?method=storage.get&key=chapters-"+tid,
async: false,
cache: false
	}).responseText);

	  //Если оглавление существует
	  try
	  {
  var q = /&quot;/g,
	  a = /&apos;/g;
	
  //заменить юникодные кавычки и апострофы
  this_chapter=(this_chapter.response.storage.data['chapters-'+tid]).replace(q, "\"").replace(a, "\'");
  this_chapter=JSON.parse(this_chapter);
  
  //иначе пустой массив
	  } catch(e) {this_chapter=[];}
	  
	  
	  last_rev = JSON.parse($.ajax({
	url: "/api.php?method=storage.get&key=newchp",
	async: false,
	cache: false
}).responseText);

	  try
	  {
last_rev=JSON.parse(last_rev.response.storage.data.newchp);
if(last_rev=='') last_rev={};
	  } catch(e){last_rev={};}
	  
	  if(!(last_rev[tid]))
	  {
last_rev[tid]=0;
	  }
	  
	  tmplr=last_rev[tid];
	  
	  var hchp = '<div class="section"><div class="container chapt"><h4 class="fragment-name">Оглавление</h4><div class="formal chapters-box"><div id="chapters"><table id="chpt">';
	  
	  //И внести изменения при наличии соответствующего куки
	  if($getCookie('postChap'))
	  {
  $deleteCookie('postChap');
  
  var cc=$('.endpost:last .fragment-name')
  var PstId=$('.endpost:last').find('.permalink').attr('href').replace(/^.+?#p(\d+)$/gim,'$1');
  var PstD=$('.endpost:last').attr('data-posted');
  
  //Если в предыдущем посте нет элемента оглавления
  if($('.endpost:last').prev().find('.fragment').length==0 || cc.length)
  {
	  //создать новый
	  this_chapter.push([PstId, PstId, PstD, (cc.length ? cc.text():"")]);
  }else
  {
	  //иначе
	  //изменить номер последнего поста
	  this_chapter[this_chapter.length-1][1] = PstId;
  }
  
  var titstr='[';
  this_chapter.forEach(function(item, i)
  {
	  //Собираем строку для записи в репозиторий
	  titstr+='[\"'+item[0]+'\",\"'+item[1]+'\",\"'+item[2]+'\",\"'+item[3]+'\"],';
	  
	  //Собираем оглавление
	  hchp+='<tr class="'+(item[3] ? 'yname':'nname')+'"><td class="mrk">'+(item[3] ? '• </td><td class="namech">':'</td><td class="namech">⚬ ')
	+'<a href="'+($('#p'+item[0]).length ? '#p'+item[0] :'http://'+location.hostname+'/viewtopic.php?pid='+item[0]+'#p'+item[0])+'"' 
	+'data-posted="'+item[2]+'">'+(item[3] ? '<span class="chp_name">'+item[3]+'</span>' : 'Фрагмент')+'</a></td><td class="datach" width="60%">'+' от '+$.chTime(item[2])
	+' по МСК '+(last_rev[tid]<item[2] ? '<span class="new_chp">&nbsp;new&nbsp;</span>':'')+'</td></tr>';
	  
	  if(tmplr<item[2]) tmplr=item[2];
	  
	  //вставляем панели навигации
	  var this_fragment=$('#p'+this_chapter[i][1]);
	  if(this_fragment.length)
	  {
  try
  {
  var nav = '<div class="fragment-navigation"><ul>'+
	(i!=0 ? '<li class="prev_fragment"><a href="'+($('#p'+this_chapter[i-1][0]).length?'#p'+this_chapter[i-1][0] : 'http://'+location.hostname+'/viewtopic.php?pid='+this_chapter[i-1][0]+'#p'+this_chapter[i-1][0])+'">\<\<Предыдущий фрагмент</a></li>' : '')+
	'<li class="back_chapter"><a href="#pun-main">К оглавлению</a></li>'+
	(i!=this_chapter.length-1 ? '<li class="next_fragment"><a href="'+($('#p'+this_chapter[i+1][0]).length?'#p'+this_chapter[i+1][0] : 'http://'+location.hostname+'/viewtopic.php?pid='+this_chapter[i+1][0]+'#p'+this_chapter[i+1][0])+'">Следующий фрагмент\>\></a></li>' : '')+
	'</ul></div>';
  this_fragment.find('.post-box').after(nav);
  } catch(e)
  {
	  var nav = '<div class="fragment-navigation"><ul>'+
	'<li class="back_chapter"><a href="#pun-main">К оглавлению</a></li>'+
	'</ul></div>';
  this_fragment.find('.post-box').after(nav);
  }
	  }
  }); 
  
  titstr=titstr.substring(0,titstr.length-1)+']';
  
  //запись в репозиторий
  $.postFrame(
	'http://www.en.'+location.hostname.replace(/^www\./,'')+'/api.php', 
	{
method: 'storage.set',
user_id: 1,
token: GuestAPITicket,
key: 'chapters-'+tid,
value: titstr
	});
	  } else
	  {
  //Если куки нет
  //то собрать оглавление и создать панели навигации
  this_chapter.forEach(function(item, i)
  {
	  hchp+='<tr class="'+(item[3] ? 'yname':'nname')+'"><td class="mrk">'+(item[3] ? '• </td><td class="namech">':'</td><td class="namech">⚬ ')
	+'<a href="'+($('#p'+item[0]).length ? '#p'+item[0] :'http://'+location.hostname+'/viewtopic.php?pid='+item[0]+'#p'+item[0])+'"' 
	+'data-posted="'+item[2]+'">'+(item[3] ? '<span class="chp_name">'+item[3]+'</span>' : 'Фрагмент')+'</a></td><td class="datach" width="60%">'+' от '+$.chTime(item[2])
	+' по МСК '+(last_rev[tid]<item[2] ? '<span class="new_chp">&nbsp;new&nbsp;</span>':'')+'</td></tr>';
	  
	  if(tmplr<item[2]) tmplr=item[2];
	  
	  var this_fragment=$('#p'+this_chapter[i][1]);
	  if(this_fragment.length)
	  {
  try
  {
  var nav = '<div class="fragment-navigation"><ul>'+
	(i!=0 ? '<li class="prev_fragment"><a href="'+($('#p'+this_chapter[i-1][0]).length?'#p'+this_chapter[i-1][0] : 'http://'+location.hostname+'/viewtopic.php?pid='+this_chapter[i-1][0]+'#p'+this_chapter[i-1][0])+'">\<\<Предыдущий фрагмент</a></li>' : '')+
	'<li class="back_chapter"><a href="#pun-main">К оглавлению</a></li>'+
	(i!=this_chapter.length-1 ? '<li class="next_fragment"><a href="'+($('#p'+this_chapter[i+1][0]).length?'#p'+this_chapter[i+1][0] : 'http://'+location.hostname+'/viewtopic.php?pid='+this_chapter[i+1][0]+'#p'+this_chapter[i+1][0])+'">Следующий фрагмент\>\></a></li>' : '')+
	'</ul></div>';
  this_fragment.find('.post-box').after(nav);
  } catch(e)
  {
	  var nav = '<div class="fragment-navigation"><ul>'+
	'<li class="back_chapter"><a href="#pun-main">К оглавлению</a></li>'+
	'</ul></div>';
  this_fragment.find('.post-box').after(nav);
  }
	  }
  });
	  }
	  
	  //если в просмотре
	  if(this_chapter.length && punv)
	  {
  
  if(last_rev[tid]!=tmplr && UserID!=1)
  {
	last_rev[tid]=tmplr;
  
	$.post("/api.php", {
method: "storage.set",
token: ForumAPITicket,
key: "newchp",
value: JSON.stringify(last_rev)
	}, "json");
  }
  
  //нарисовать оглавление
  hchp+='</table></div></div></div></div>';
  $('.topic').find('h2:first').before(hchp);
	  }
  }else
  {
	  //на странице отправки поста просто записать id темы
	  tid=$("#pun-crumbs1").find("a:last").attr("href").split("id=")[1];
  }
  
  //проверка на авторство
  var sel=".topicpost .pl-email:first>a";
  var id;
  if(document.URL.indexOf('fid')>-1) {this_author = true;} else
  if( $(".topicpost").length){ id = $(sel).attr("href").split("id=")[1]
  } else 
  {  
	$.ajax({ url:"/viewtopic.php?id="+tid,async:false,cache:true,success:function(data){
      id = $(data).find(sel).attr("href").split("id=")[1];
	}});
  }
  if( id && +id == UserID) this_author = true;
  
  //если автор или модератор
  if(GroupID<=2 || !!this_author)
  {
	  $('#button-right').after(t0);

	  // Обрабатываем форму, вызываем функцию...
	  var xx=$('[name="submit"]');
	  var nn=xx.length;
	  xx.click(function() {

//var tmp_chapter;
var cc = $('#main-reply:first').val();

var nameCook;

// если редактирование
if(pune)
{
	//аякс запрос следующего и предыдущего сообщений
	//и сопутствующей информации
	var pid = document.URL.split("id=")[1].split("&amp;")[0];
	var nextc, prevc, thc;
	var dataPost;
	var idn, idp;
	$.ajax({ url:"/viewtopic.php?pid="+pid+"#p"+pid,async:false,cache:true,success:function(data){
thc = $(data).find('#p'+pid).text();
nextc = $(data).find('#p'+pid).next().text();
try
{
	idn = $(data).find('#p'+pid).next().attr('id').replace(/p/gim,'');
} catch(e){}
prevc = $(data).find('#p'+pid).prev().text();
try
{
	idp = $(data).find('#p'+pid).prev().attr('id').replace(/p/gim,'');
} catch(e){}
dataPost = $(data).find('#p'+pid).attr('data-posted');
	}});
	
	//если раньше был частью оглавлений и сейчас часть оглавления
	if(cc.indexOf('[/fragment]')!=-1 && thc.indexOf('[/fragment]')!=-1)
	{
//Сейчас именован
if(cc.indexOf('[fragment=')!=-1)
{
	//Раньше именован
	if(thc.indexOf('[fragment=')!=-1)
	{
//Изменить имя в соответствующем элементе
this_chapter.forEach(function(item, i){if(item[0]==pid)item[3]=cc.substring(cc.indexOf('[fragment="')+11,cc.indexOf('"]'));}); 
	} else 
	{
//Реньше не был именован
//Если предыдущее и следующее сообщения - части оглавления
if(nextc.indexOf('[/fragment]')!=-1 && prevc.indexOf('[/fragment]')!=-1)
{
	//Если следующее сообщение именовано
	if(nextc.indexOf('[fragment=')!=-1)
	{
//Изменить у предыдущего элемента номер завершающего сообщения...
var idarr;
this_chapter.forEach(function(item, i)
{
	if(item[1]==pid)
	{
idarr=i;
item[1]=idp;
	}
}); 
//И вставить новый элемент оглавления
this_chapter.splice(idarr+1,0,[pid, pid, dataPost, cc.substring(cc.indexOf('[fragment="')+11,cc.indexOf('"]'))]);
	} else
	{
//Если не именовано
//Найти и изменить предыдущий
var idarr;
var tmp;
this_chapter.forEach(function(item, i)
{
	if(item[0]<pid && pid<item[1])
	{
idarr=i;
tmp=item[1];
item[1]=idp;
	}
}); 
//и вставить новый
//А дальше мне лень писать коментарии.
this_chapter.splice(idarr+1,0,[pid, tmp, dataPost, cc.substring(cc.indexOf('[fragment="')+11,cc.indexOf('"]'))]);
	}
} else if(nextc.indexOf('[/fragment]')!=-1)
{
	this_chapter.forEach(function(item)
	{
if(item[0]==pid)
{
	item[3]=cc.substring(cc.indexOf('[fragment="')+11,cc.indexOf('"]'));
}
	});
} else if(prevc.indexOf('[/fragment]')!=-1)
{
	var idarr;
	this_chapter.forEach(function(item, i)
	{
if(item[1]==pid)
{
	idarr=i;
	item[1]=idp;
}
	}); 
	this_chapter.splice(idarr+1,0,[pid, pid, dataPost, cc.substring(cc.indexOf('[fragment="')+11,cc.indexOf('"]'))]);
} else
{
	//var idarr=0;
	this_chapter.forEach(function(item, i)
	{
if(item[0]==pid)
{
	item[3]=cc.substring(cc.indexOf('[fragment="')+11,cc.indexOf('"]'));
}
	}); 
	//this_chapter.splice(idarr+1,0,[pid, pid, dataPost, cc.substring(cc.indexOf('[fragment="')+11,cc.indexOf('"]'))]);
}
	}
} else 
{
	if(thc.indexOf('[fragment=')!=-1)
	{
if(prevc.indexOf('[/fragment]')!=-1)
{
	var idarr;
	this_chapter.forEach(function(item, i)
	{
if(item[0]==pid)
{
	this_chapter[i-1][1]=item[1];
	idarr=i;
}
	}); 
	this_chapter.splice(idarr,1);
} else 
{
	this_chapter.forEach(function(item, i)
	{
if(item[0]==pid)
{
	item[3]="";
}
	}); 
}
	}
}
	} else if(cc.indexOf('[/fragment]')!=-1)
	{
if(cc.indexOf('[fragment=')!=-1)
{
	if(nextc.indexOf('[/fragment]')!=-1 && prevc.indexOf('[/fragment]')!=-1)
	{
if(nextc.indexOf('[fragment=')!=-1)
{
	var idarr;
	this_chapter.forEach(function(item, i)
	{
if(item[1]==idp)
{
	idarr=i;
}
	}); 
	this_chapter.splice(idarr+1,0,[pid, pid, dataPost, cc.substring(cc.indexOf('[fragment="')+11,cc.indexOf('"]'))]);
} else
{
	this_chapter.forEach(function(item, i)
	{
if(item[0]==idn)
{
	item[0]=pid;
	item[3]=cc.substring(cc.indexOf('[fragment="')+11,cc.indexOf('"]'));
}
	}); 
}
	} else if(nextc.indexOf('[/fragment]')!=-1)
	{
if(nextc.indexOf('[fragment=')!=-1)
{
	var idarr;
	this_chapter.forEach(function(item, i)
	{
if(item[0]==idn)
{
	idarr=i;
}
	}); 
	this_chapter.splice(idarr,0,[pid, pid, dataPost, cc.substring(cc.indexOf('[fragment="')+11,cc.indexOf('"]'))]);
} else
{
	this_chapter.forEach(function(item, i)
	{
if(item[0]==idn)
{
	item[0]=pid;
	item[3]=cc.substring(cc.indexOf('[fragment="')+11,cc.indexOf('"]'));
}
	}); 
}
	} else if(prevc.indexOf('[/fragment]')!=-1)
	{
var idarr;
this_chapter.forEach(function(item, i)
{
	if(item[1]==idp)
	{
idarr=i;
	}
}); 
this_chapter.splice(idarr+1,0,[pid, pid, dataPost, cc.substring(cc.indexOf('[fragment="')+11,cc.indexOf('"]'))]);
	} else
	{
var idarr=0;
this_chapter.forEach(function(item, i)
{
	if(item[0]<pid)
	{
idarr=i;
	}
}); 
this_chapter.splice(idarr+1,0,[pid, pid, dataPost, cc.substring(cc.indexOf('[fragment="')+11,cc.indexOf('"]'))]);
	}
} else 
{
	if(nextc.indexOf('[/fragment]')!=-1 && prevc.indexOf('[/fragment]')!=-1)
	{
if(nextc.indexOf('[fragment=')!=-1)
{
	this_chapter.forEach(function(item, i)
	{
if(item[1]==idp)
{
	item[1]=pid;
}
	}); 
} else
{
	var idarr;
	this_chapter.forEach(function(item, i)
	{
if(item[1]==idp)
{
	idarr=i;
	item[1]=this_chapter[i+1][1];
}
	}); 
	this_chapter.splice(idarr+1,1);
}
	} else if(nextc.indexOf('[/fragment]')!=-1)
	{
if(nextc.indexOf('[fragment=')!=-1)
{
	var idarr;
	this_chapter.forEach(function(item, i)
	{
if(item[0]==idn)
{
	idarr=i;
}
	}); 
	this_chapter.splice(idarr,0,[pid, pid, dataPost, ""]);
} else
{
	this_chapter.forEach(function(item, i)
	{
if(item[0]==idn)
{
	item[0]=pid;
}
	}); 
}
	} else if(prevc.indexOf('[/fragment]')!=-1)
	{
this_chapter.forEach(function(item, i)
{
	if(item[1]==idp)
	{
item[1]=pid;
	}
}); 
	} else
	{
var idarr=0;
this_chapter.forEach(function(item, i)
{
	if(item[0]<pid)
	{
idarr=i;
	}
}); 
this_chapter.splice(idarr+1,0,[pid, pid, dataPost, ""]);
	}
}
	} else if(thc.indexOf('[/fragment]')!=-1)
	{
if(nextc.indexOf('[/fragment]')!=-1 && prevc.indexOf('[/fragment]')!=-1)
{
	if(nextc.indexOf('[fragment=')!=-1)
	{
var idarr;
this_chapter.forEach(function(item, i)
{
	if(item[1]==pid)
	{
idarr=i;
item[1]=idp;
	}
}); 
if(thc.indexOf('[fragment=')!=-1)
	this_chapter.splice(idarr,1);
	} else
	{
if(thc.indexOf('[fragment=')!=-1)
{
	this_chapter.forEach(function(item, i)
	{
if(item[0]==pid)
{
	item[0]=idn;
	item[3]="";
}
	}); 
}else
{
	var idarr;
	var tmp;
	this_chapter.forEach(function(item, i)
	{
if(item[0]<pid && pid<item[1])
{
	idarr=i;
	tmp=item[1];
	item[1]=idp;
}
	}); 
	this_chapter.splice(idarr+1,0,[idn, tmp, dataPost, ""]);
}
	}
} else if(nextc.indexOf('[/fragment]')!=-1)
{
	if(nextc.indexOf('[fragment=')!=-1)
	{
var idarr;
this_chapter.forEach(function(item, i)
{
	if(item[0]==pid)
	{
idarr=i;
	}
}); 
this_chapter.splice(idarr,1);
	} else
	{
this_chapter.forEach(function(item, i)
{
	if(item[0]==pid)
	{
item[0]=idn;
item[3]="";
	}
}); 
	}
} else if(prevc.indexOf('[/fragment]')!=-1)
{
	if(thc.indexOf('[fragment=')!=-1)
	{
var idarr=0;
this_chapter.forEach(function(item, i)
{
	if(item[1]==pid)
	{
idarr=i;
	}
}); 
this_chapter.splice(idarr,1);
	} else
	{
this_chapter.forEach(function(item, i)
{
	if(item[1]==pid)
	{
item[1]==idp;
	}
}); 
	}
} else
{
	var idarr=0;
	this_chapter.forEach(function(item, i)
	{
if(item[1]==pid)
{
	idarr=i;
}
	}); 
	this_chapter.splice(idarr,1);
}
	}
	
	//собрать строку для записи в репозиторий
	var titstr='[';
	this_chapter.forEach(function(item, i)
	{
titstr+='[\"'+item[0]+'\",\"'+item[1]+'\",\"'+item[2]+'\",\"'+item[3]+'\"],';
	}); 
  
	titstr=titstr.substring(0,titstr.length-1)+']';
  
	//Запись если в строке есть оглавление
	if(titstr.length>1)
	{
$.postFrame(
	'http://www.en.'+location.hostname.replace(/^www\./,'')+'/api.php', 
	{
method: 'storage.set',
user_id: 1,
token: GuestAPITicket,
key: 'chapters-'+tid,
value: titstr
	});
	} else //иначе удалить
	{
$.post('http://www.en.'+location.hostname.replace(/^www\./,'')+'/api.php', {
method: "storage.delete",
token: GuestAPITicket,
key: 'chapters-'+tid
	}, "json");
	}
//Если создание нового поста
//И в форме есть элемент
} else if(cc.indexOf('[/fragment]')!=-1)
{
	//создать куки
	nameCook='postChap';
	$setCookie(nameCook, true, 120*1000);
}
	  });
	  
	  //Если удаление сообщения
	  $('[name="delete"]').click(function() {
  var pid = document.URL.split("id=")[1].split("&amp;")[0];
  if($('post-content:contains("[/fragment]")').length)
  {
	var titstr='[';
	this_chapter.forEach(function(item){if(item[0]!=pid || item[1]!=pid)
{
	if(item[1]==pid) item[1]=$(this).prev().attr("href").split("id=")[1];
	if(item[0]==pid) item[0]=$(this).next().attr("href").split("id=")[1];
	titstr+='[\"'+item[0]+'\",\"'+item[1]+'\",\"'+item[2]+'\",\"'+item[3]+'\"],';
}}); 
	titstr=titstr.substring(0,titstr.length-1)+']';
	
	if(titstr.length>1)
	{
$.postFrame(
	'http://www.en.'+location.hostname.replace(/^www\./,'')+'/api.php', 
	{
method: 'storage.set',
user_id: 1,
token: GuestAPITicket,
key: 'chapters-'+tid,
value: titstr
	});
	} else
	{
$.post('http://www.en.'+location.hostname.replace(/^www\./,'')+'/api.php', {
method: "storage.delete",
token: GuestAPITicket,
key: 'chapters-'+tid
	}, "json");
	}
  }
	  });
  } 
  else 
  {
    $('.formsubmit .button').click(function() {
	  var txt = $('#main-reply:first').val();
	  if(txt.indexOf('[/fragment]')!=-1)
	  {
alert('Вам запрещено использовать теги оглавления вне своих произведений!');
$('.button[disabled]').removeAttr('disabled');return false;
	  }
    });
  }
}());
</script>

Код не идеален, но все это делалось в обеденные перерывы на работе, так что еще и шлифовать его мне откровенно лень.

Отредактировано Ezingrin (Пт, 2 Дек 2016 17:29:49)

+4

453

Попытка устранить явление оверквотинга техническими средствами:
Сворачивание длинных цитат в сообщениях
(разворачивается/сворачивается по клику на стрелку внизу цитаты)
http://s4.uploads.ru/r7b5w.png
В HTML верх

<!-- Сворачивание длинных цитат -->
<style type="text/css">
.quote-box.toggle blockquote,.quote-box.toggle{position:relative;overflow-y:hidden}
.quote-box .quote-after{width:100%;height:2em;position:absolute;display:block;bottom:-.5em;transition:background-image .4s ease;cursor:pointer}
.quote-after:before {content:"^";width:100%;text-align:center;position:absolute;line-height:2em;font-weight:700;font-size:1.2em;bottom:-.5em}
.quote-after.q-resize-1:before {transform:rotate(180deg);top:0;bottom:0;}
</style>

<script type="text/javascript" src="http://forumfiles.ru/files/0015/c4/3f/91221.js"></script>


Тестируем, отписываемся в теме Запросы по скриптам[8]

+2

454

я в курсе что есть много вариаций расширенной палитры цветов в форме ответа:
1.Большая палитра с фоновой картинкой от lenhenster (Deff)
2.Новая палитра цветов. Добавляет в стандартную палитру 4096 цветов. (RUSSIAN_GOBLIN)
но было желание по-экспериментировать  с input type="color" (браузерная поддержка)

чем отличается данный вариант?
1. очень короткий код
2. практически неограниченная палитра
минус - не все старые браузеры поддерживают input type="color", но это скорее всего проблема тех, кто пользуется старыми и медленно развивающимися браузерами

Расширенная палитра цветов (NEW)

http://s7.uploads.ru/FoPT5.jpg

В действии

http://sh.uploads.ru/1NX0e.gif

в HTML-низ:

Код:
<!-- Расширенная палитра цветов (NEW) -->
<script type="text/javascript">
$('#color-area tr').append('<td><input type="color" id="litr" style="cursor:pointer;padding:0;width:22px;" title="Показать всю палитру" value="#ffa500"></td>');$('#litr').change(function(){bbcode('[color='+this.value+']','[/color]');});
</script>

можно привести вот к таком виду, добавив код перед скриптом
http://sg.uploads.ru/QDz3a.jpg

Код:
<style type="text/css">
input[type=color]::-webkit-color-swatch {background-color: transparent !important; border:none;}
input[type=color]::-moz-color-swatch {background-color: transparent !important; border:none;}
#litr{background: url(http://forumfiles.ru/files/0017/d8/50/28311.png) no-repeat scroll 0 0 / cover ;}
</style>

+7

455

3ASOFT написал(а):

В мобильной версии форума ролики ютуба выложенные на форум отображаются половинчато. Скажите есть ли способ чтобы окошечко было полным и удавалось пальчиком нажать расширение окна для раскрытия ютуба на весь телефон?

Автоуменьшение фреймов в постах(на маленьких экранах)http://s9.uploads.ru/1bFyL.png
В HTML низ:

<!-- Автоуменьшение фреймов -->
<script type="text/javascript">
$(".post-content iframe[allowfullscreen]").each(function(){
    var w = $(this).width(),h = $(this).height(),k = h/w;
    var c = $(this).parents("p").width();if(c>w)return;
    $(this).attr("width",c).attr("height",c*k)
  });
</script>

+2

456

Идея пользователя Mirra BellАватарка юзера в строке приветствияhttp://s3.uploads.ru/cj1qw.png
В HTML низ

<!-- Аватарка в строке приветствия --><style>.status_userava>img{width:34px;height:auto;vertical-align:middle;border-radius:4px;margin:-.6em 0}</style>
<script>$('#pun-status>p').prepend('<span class="status_userava"><img src="'+(window.UserAvatar?UserAvatar:'/i/default_avatar.jpg')+'"/></span>')</script>

+11

457

Дитя написал(а):

Пожалуйста, покажите мне скрипт <...>, сменяющий шапки на форуме по времени суток

Смена Шапки форума в зависимости от времени суток
В HTML верх:

<!--Шапка форума по времени суток-->
<style id=ChangeTitle>
#pun-title {
  background:url( #title_hours_time );
}

</style>

<script type="text/javascript">
(function(){
var ImgArr=new Array (
"
картинка - ночь",   //ночь
"
картинка - утро",   //утро
"
картинка - день",   //день
"
картинка - вечер"  //вечер   //!!последний элемент без запятой
);
var h=new Date().getHours(),img;
if(h>23||h<7){img=ImgArr[0];}else if(h>6&&h<12){img=ImgArr[1];}else if(h>11&&h<19){
img=ImgArr[2];}else if(h>18&&h<24){img=ImgArr[3];} img="'"+img+"'";
var L=$("style.#ChangeTitle").html();L=L.replace("#title_hours_time",img);$("style.#ChangeTitle").html(L)}());
</script>

Красным - ссылки на картинки (соответственно для каждого времени суток),
Жирным оливковым - Ваш стиль - оформление для элемента,
Подчеркнутое - не меняем, - этот кусок будет заменяться на нужную картинку, нужен для работы скрипта

Т.е. прописываем фон для нужного элемента(на котором у нас шапка), вместо ссылки на картинку - ставим #title_hours_time


Тестируем

+4

458

Скрипт "Регулировка размера шрифта в постах бегунком" обновлен.
Устранена ошибка, выпадающая в консоль, на страницах, где отсутствует регулятор; добавлена работа регулятора в Личке и на странице Поиска сообщений

+6

459

Вариация скрипта Регулировка размера шрифта в постах бегунком
Поскольку часто спрашивают, как можно менять размер шрифта
не только в постах, но и в Форме Ответа, -                                     
сделал такой вариант, с учетом предыдущих правок                   
Регулятор со сменой шрифта и в Форме Ответа
В HTML низ:

<!-- Регулировка размера шрифта в постах © Alex_63 -->
<style>
.FNTslider {
  border-radius: 4px;
  position:relative;z-index:1000;
  background: #E0E0E0;
  width: 110px;
  height: 5px;
  margin: 3px 5px;
  border: solid 1px #ccc;
  float: right;
  margin-right: 7%;
}
.FNTslider .before {
  height: 5px;
  border: solid 1px transparent;
  border-right: none 0;
  border-radius: 4px 0 0 4px;
  position: absolute;
  background: #A0BCDA;
  margin-top: -1px;
}
.FNTslider .thumb {
  width: 8px;
  height: 13px;
  border-radius: 3px;
  position: relative;
  top: -4px;
  background: #3980D8;
  cursor: pointer;
}
</style>

<script type="text/javascript" src="http://forumfiles.ru/files/0016/0b/c8/31011.js"></script>

Скриншоты и описание смотрим в Исходном посте(ссылка вверху сообщения)

+1

460

Вообщем навеял скрипт Ромыча Тени для шрифта, вот решил свой вариант предложить (ставить НТМЛ низ):

Код:
<!--Тень для текста с любыми параметрами-->
<script type="text/javascript">
$('td#button-right').after('<td id="shad" style=\'background-image:url("http://www.iconsearch.ru/uploads/icons/gnomeicontheme/16x16/stock_text-shadow.png")\' title="Тень для текста" onclick="tag_shadow()"></td>');
$(function(){
$('.post-content:contains("[shadow=")').each(function(){
var htmlSHADOW = $(this).html().replace(/\[shadow=(.*?)\]([^`]*?)\[\/shadow\]/gi, "<span style='width=80%; text-shadow:$1;'>$2</span>");
$(this).html(htmlSHADOW)
});
});
function tag_shadow(){
var FoundErrorsSHADOW = '';
var shadowTIT = prompt('Введите параметры тени', '1px 1px 2px #FFF6AD');
if (FoundErrorsSHADOW)
{alert("Ошибка!" + FoundErrorsSHADOW);
return;}
bbcode('[shadow='+shadowTIT+']','[/shadow]');
}
</script>

Ставить можно любые параметры доступные в css для тени, вот примеры:
http://sf.uploads.ru/SHMlF.png

Код:
[shadow=1px 1px 2px black, 0 0 1em red][b][size=16][color=white]В чащах юга жил бы цитрус? Да, но фальшивый экземпляр![/color][/size][/b][/shadow]

[shadow=6px 6px 0px rgba(0,0,0,0.2)][b][size=18][color=white]Много очень очень очень текста[/color][/size][/b][/shadow]

[shadow=4px 3px 0px #fff, 9px 8px 0px rgba(0,0,0,0.15)][b][size=20]А вот еще Пример!!![/size][/b][/shadow]

[shadow=0 1px 0 #ccc,0 2px 0 #c9c9c9,0 3px 0 #bbb,0 4px 0 #b9b9b9,0 5px 0 #aaa,0 6px 1px rgba(0,0,0,.1),0 0 5px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.3),0 3px 5px rgba(0,0,0,.2),0 5px 10px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.2),0 20px 20px rgba(0,0,0,.15)][b][size=28][color=white]3D текст от Mark Dotto[/color][/size][/b][/shadow]

[shadow=0px 0px 6px rgba(255,255,255,0.7)][b][size=30]Сияние текста[/size][/b][/shadow]

[shadow=-10px 10px 0px #00e6e6,-20px 20px 0px #01cccc,-30px 30px 0px #00bdbd][b][size=28][color=aqua]Ретро-стиль[/color][/size][/b][/shadow]

[shadow=2px 8px 6px rgba(0,0,0,0.2), 0px -5px 35px rgba(255,255,255,0.3)][b][size=26][color=green]Выпуклый текст[/color][/size][/b][/shadow]

Не знаю насколько это безопасно. Скрипт не кроссбраузерный. Internet Explorer только с версии 10.0.

В принципе на основе такого подхода можно будет сделать скрипт и фоновой картинки, фонового цвета для текста...

Отредактировано kolobdur74 (Сб, 18 Фев 2017 13:52:18)

+9


Вы здесь » Единый форум поддержки » Новые возможности форумов » Скрипты от пользователей 3