Плагин tinymce 3.x advlink - по умолчанию устанавливает ссылки для открытия в новом окне / вкладке

При использовании плагина advlink значением по умолчанию для "target" является "_self" (т.е. ссылки открываются в том же окне / вкладке). Как сделать так, чтобы ссылки открывались в новом окне / вкладке по умолчанию?

1 ответ

Нам нужно внести следующие изменения в файл advlink.js находится в [yourTinymcePluginsDirectory]/advlink/js/advlink.js,

Найдите следующую часть:

    function getTargetListHTML(elm_id, target_form_element) {

        var targets = tinyMCEPopup.getParam('theme_advanced_link_targets', '').split(';');
        var html = '';

        html += '<select id="' + elm_id + '" name="' + elm_id + '" onchange="this.form.' + target_form_element + '.value=';
        html += 'this.options[this.selectedIndex].value;">';
        html += '<option value="_self">' + tinyMCEPopup.getLang('advlink_dlg.target_same') + '</option>';
        html += '<option value="_blank">' + tinyMCEPopup.getLang('advlink_dlg.target_blank') + ' (_blank)</option>';
        html += '<option value="_parent">' + tinyMCEPopup.getLang('advlink_dlg.target_parent') + ' (_parent)</option>';
        html += '<option value="_top">' + tinyMCEPopup.getLang('advlink_dlg.target_top') + ' (_top)</option>';

Нам нужно изменить порядок опций. Так что просто поместите опцию "_blank" сверху:

        html += '<option value="_blank">' + tinyMCEPopup.getLang('advlink_dlg.target_blank') + ' (_blank)</option>';
        html += '<option value="_self">' + tinyMCEPopup.getLang('advlink_dlg.target_same') + '</option>';
        html += '<option value="_parent">' + tinyMCEPopup.getLang('advlink_dlg.target_parent') + ' (_parent)</option>';
        html += '<option value="_top">' + tinyMCEPopup.getLang('advlink_dlg.target_top') + ' (_top)</option>';

И вуаля, вот и все. Это было? Нет!

Хотя это действительно сработает, если мы попытаемся изменить цель ссылки на _self, хотя HTML-код действительно будет корректно обновляться, в раскрывающемся списке будет отображаться _blank опция как выбрано. Это происходит потому, что при выборе _self вариант target Атрибут Tinymce не обновляется до _self а скорее "" - так пустая строка. Поэтому при выборе _self скрипт попытается найти атрибут с именем "", конечно, не найдет ни одного, поэтому он выберет первый вариант по умолчанию. Хотя это работает, когда первый вариант _selfне будет работать когда _self это не первый вариант.

Чтобы решить эту проблему, мы должны сообщить скрипту, что когда целевой атрибут Tinymce установлен в пустую строку, он должен искать атрибут с именем _self вместо. Таким образом, он сможет найти его, даже если это не первый вариант.

Чтобы достичь этого, нам также необходимо внести еще одно изменение в поведение скрипта. Найдите следующую строку:

selectByValue(formObj, 'targetlist', inst.dom.getAttrib(elm, 'target'), true);

И заменить его на:

    var target_value = inst.dom.getAttrib(elm, 'target');
    if (inst.dom.getAttrib(elm, 'target') == ""){
        target_value = "_self";
    }//end if

    selectByValue(formObj, 'targetlist', target_value, true);

И теперь все должно работать отлично, с _blank быть целевой опцией по умолчанию.

Другие вопросы по тегам