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); } };
Страница 1 из 1
Добавление функции в JS
#1
Отправлено 01 Январь 2015 - 05:07
Пожалуйста, помогите добавить функцию, для моего bb кода [youtube]. Есть функция в которой я посмотрел реализацию всплывающего окна, при использовании bb кода [url] в визуальном редакторе. Мне нужно переделать эту функцию под мой код. Ниже сама функция. Не понятные которые части функции, их я отметил комментарием. В моем случае юзеры будут вставлять часть ссылки после "=" с youtube, например aF_GwG4v-sw .
#2
Отправлено 02 Январь 2015 - 01:45
Через всплывающие окно можно вставлять и прямую ссылку, и парсить из нее нужный параметр.
var match = _text.match(/(?:\?|&)v=(.+?)(&|$)/); if(match){ _text = match[1]; } this.wrap_tags('youtube', false, _text);
#3
Отправлено 03 Январь 2015 - 06:37
Простите за мою тупость, но я так и не понял как в итоге должна выглядеть функция.
#4
Отправлено 03 Январь 2015 - 17:41
Да все также как у вас.
this.wrap_tags - вставляет отформатированный ббкод в редактор. В вашем случае this.wrap_tags('youtube', false, _text);
this.createlink - это функция которая отработает при нажатии кнопки. Если кнопка в редакторе имеет ид "fast-reply_cmd_ipb_youtube", то имя функции будет this.ipb_youtube.
Если хотите дополнительно обработать прямые ссылки ютуба, можете юзать код который я привел выше.
В итоге должно получится нечто похожее на это:
Можно будет вставлять как полною ссылку на ютуб, так и только ид видео.
В \jscripts\ips_text_editor.js (для полного редактора)
Добавить ниже
В \jscripts\ips_text_editor_lite.js (для быстрого редактора)
Добавить ниже
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]','[/code]',0)};
В \jscripts\ips_text_editor_lite.js (для быстрого редактора)
Добавить ниже
this.ipb_code=function(){var _text=this.get_selection();this.wrap_tags('code',false,_text);};
#5
Отправлено 04 Январь 2015 - 00:23
К сожалению функция в итоге не работает, в \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", но это также ни к чему, не привело. Кеш обновлял.
#6
Отправлено 04 Январь 2015 - 00:29
Функция рабочая, я ее тестировал на локалхосте. Еще раз внимательно все проверьте, особенно с редактированием файлов, там легко ошибиться. Также обратите внимание где я говорил про имени функции в зависимости от ид кнопки, возможно она просто не срабатывает.
#7
Отправлено 04 Январь 2015 - 01:21
Не работает. Кеш обновлял. Как и раньше, просто вставляется 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 (04 Январь 2015 - 01:25)
#8
Отправлено 04 Январь 2015 - 03:19
Переправеряйте, учитывая все нюансы о которых я говорил выше. Дебажте что у вас там просто "вставляется". Не советую плодить много функций, еще больше в них запутаетесь.
Сообщить об этой теме:
Страница 1 из 1