Поймать переводы строк в текстовом поле в XUL - PullRequest
2 голосов
/ 27 октября 2011

Вопрос: как мне получить новые строки в строке, введенной в текстовое поле, созданное, как описано ниже?

Мотивация: Я пытаюсь составить парудействительно простые изменения в расширении FireFox (Zotero), чтобы мне было легче его использовать.Это расширение позволяет вводить теги для элемента, вводя их в текстовое поле и нажимая клавишу ввода.Я хотел бы иметь возможность вводить сразу несколько тегов, вставляя их в текстовое поле в виде строки с символом новой строки в качестве разделителя между тегами.символ новой строки был выбран, потому что другие символы являются жизнеспособным выбором для использования в самом теге.

Проблема: , когда я вставляю строку в текстовое поле ввода прямо сейчас, он удаляет все новые строки изаменяет их одиночными пробелами.Я не могу найти где-нибудь в коде расширения, где это происходит, поэтому я думаю, что это свойство самого текстового поля.Я пытаюсь найти документацию по этому текстовому полю, чтобы увидеть, есть ли какие-то свойства, с которыми я могу поиграть, чтобы перехватить новые строки, но я не очень знаком с JavaScript и HTML, и у меня возникают проблемы с поиском чего-либо.Я хотел бы найти наименее инвазивное возможное решение (такое, которое не меняет способ, которым текстовое поле в настоящее время работает для ввода новых записей и нажатия Enter), чтобы эта модификация могла быть принята в основную версию расширения.

Ресурсы: пока единственное, что я нашел в Интернете при обсуждении аналогичной проблемы, это этот другой вопрос о разрешении табуляции в текстовом поле, но не о переводе строки.Я не уверен, является ли это проблемой HTML (есть ли свойство, которое можно установить, чтобы разрешить сохранение новых строк?) Или JavaScript (нужно ли переписать код, указанный ниже?).Я пытался взглянуть на документацию для обоих, но пока не нашел ничего (большинство учебных пособий по HTML обсуждают текстовое поле, а не текстовое поле).

Код: Вот код, который создает текстовое полеобъект (или это метод или форма?) Я имею дело с:

        <method name="showEditor">
            <parameter name="elem"/>
            <body>
            <![CDATA[
                // Blur any active fields
                /*
                if (this._dynamicFields) {
                    this._dynamicFields.focus();
                }
                */

                Zotero.debug('Showing editor');

                var fieldName = 'tag';
                var tabindex = elem.getAttribute('ztabindex');

                var tagID = elem.parentNode.getAttribute('id').split('-')[1];
                var value = tagID ? Zotero.Tags.getName(tagID) : '';
                var itemID = Zotero.getAncestorByTagName(elem, 'tagsbox').item.id;

                var t = document.createElement("textbox");
                t.setAttribute('value', value);
                t.setAttribute('fieldname', fieldName);
                t.setAttribute('ztabindex', tabindex);
                t.setAttribute('flex', '1');

                // Add auto-complete
                t.setAttribute('type', 'autocomplete');
                t.setAttribute('autocompletesearch', 'zotero');
                var suffix = itemID ? itemID : '';
                t.setAttribute('autocompletesearchparam', fieldName + '/' + suffix);

                var box = elem.parentNode;
                box.replaceChild(t, elem);

                // Prevent error when clicking between a changed field
                // and another -- there's probably a better way
                if (!t.select) {
                    return;
                }

                t.select();

                t.addEventListener('blur', function () {
                    document.getBindingParent(this).blurHandler(this);
                }, false);
                t.setAttribute('onkeypress', "return document.getBindingParent(this).handleKeyPress(event)");

                this._tabDirection = false;
                this._lastTabIndex = tabindex;

                return t;
            ]]>
            </body>
        </method>

Ответы [ 2 ]

2 голосов
/ 04 ноября 2011

Этот вопрос на самом деле о XUL, а не HTML. Документация для объекта textbox может быть найдена здесь:

https://developer.mozilla.org/en/XUL/textbox

Свойство, которое нужно установить, это перевод строки. Установив для этого «pasteintact», новые строки могут быть сохранены.

0 голосов
/ 27 октября 2011

Я не знаком с расширениями Firefox, но обычные текстовые поля не убирают переводы строк.

Там происходит что-то еще.Вероятно, что-то для создания тегов, которые проверяют символы.

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

...