Перейти к публикации
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.

Добавление функции в JS

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

Пожалуйста, помогите добавить функцию, для моего bb кода . Есть функция в которой я посмотрел реализацию всплывающего окна, при использовании bb кода в визуальном редакторе. Мне нужно переделать эту функцию под мой код. Ниже сама функция. Не понятные которые части функции, их я отметил комментарием. В моем случае юзеры будут вставлять часть ссылки после "=" с youtube, например aF_GwG4v-sw .

 

    this.___IPB_FUNCTIONS = function() {};
   this.createlink = function(e) {
       var _text = this.get_selection();
       // _text = _text.replace(/\n|\r|<br \/>/g, '');
       //  if (_text.match(/(<a href|\[url)/ig)) {
           this.format_text(e, "unlink", false);
       } else {
           var _url = prompt(ipb_global_lang['editor_enter_youtube'],
               '');
           if (!_url || _url == null || _url == '') {
               return false;
           }
           _text = _text ? _text : prompt(ipb_global_lang[
               'editor_enter_title'], ipb_global_lang[
               'visit_my_website']);
           if (!_text || _text == null) {
               return false;
           }
           this.wrap_tags('url', _url, _text);
       }
   };

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

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

Через всплывающие окно можно вставлять и прямую ссылку, и парсить из нее нужный параметр.

 

var match = _text.match(/(?:\?|&)v=(.+?)(&|$)/);
if(match){
   _text = match[1];
}
this.wrap_tags('youtube', false, _text);

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

Простите за мою тупость, но я так и не понял как в итоге должна выглядеть функция.

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

Да все также как у вас.

this.wrap_tags - вставляет отформатированный ббкод в редактор. В вашем случае this.wrap_tags('youtube', false, _text);

this.createlink - это функция которая отработает при нажатии кнопки. Если кнопка в редакторе имеет ид "fast-reply_cmd_ipb_youtube", то имя функции будет this.ipb_youtube.

Если хотите дополнительно обработать прямые ссылки ютуба, можете юзать код который я привел выше.

 

В итоге должно получится нечто похожее на это:

 

this.ipb_youtube = function(e) {
var _text = this.get_selection();
_text = _text ? _text : prompt('Enter youtube url or video id', '');
if (!_text || _text == null) {
	return false;
}
var match = _text.match(/(?:\?|&)v=(.+?)(&|$)/);
if(match){
	_text = match[1];
}
this.wrap_tags('youtube', false, _text);
};

Можно будет вставлять как полною ссылку на ютуб, так и только ид видео.

 

В \jscripts\ips_text_editor.js (для полного редактора)

Добавить ниже

 

this.ipb_code=function(){this.wrap_tags_lite('[code]','
',0)};[/code]

В \jscripts\ips_text_editor_lite.js (для быстрого редактора)

Добавить ниже

 

this.ipb_code=function(){var _text=this.get_selection();this.wrap_tags('code',false,_text);};

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

К сожалению функция в итоге не работает, в \jscripts\ips_text_editor.js и \jscripts\ips_text_editor_lite.js она у меня уже добавлена как youtube. Тут "_text = _text ? _text : prompt('Enter youtube url or video id', '');" изменил на "_text = _text ? _text : prompt(ipb_global_lang['editor_enter_youtube'], '');", т.к. в ланг кеше у меня проставлен тег как для url "editor_enter_youtube", но это также ни к чему, не привело. Кеш обновлял.

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

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

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

Не работает. Кеш обновлял. Как и раньше, просто вставляется bb код в окно редактора.

 

	this.ipb_youtube = function(e) {
   var _text = this.get_selection();
   _text = _text ? _text : prompt('Enter youtube url or video id', '');
   if (!_text || _text == null) {
       return false;
   }
   var match = _text.match(/(?:\?|&)v=(.+?)(&|$)/);
   if(match){
       _text = match[1];
   }
   this.wrap_tags('youtube', false, _text);
};

 

    this.ipb_youtube = function() {
       this.wrap_tags_lite('[youtube]', '[/youtube]', 0)
   };

 

this.ipb_youtube=function(){var _text=this.get_selection();this.wrap_tags('youtube',false,_text);};

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

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

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

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

Сейчас на странице 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.