Что такое код swfbutton >setup

Содержание

Что такое код swfbutton >setup

SWFbutton->setUp — псевдоним addShape(shape, SWFBUTTON_UP).

Описание

void swfbutton->setup (ressource shape)

Эта функция — ЭКСПЕРИМЕНТАЛЬНАЯ. Поведение, имя и всё остальное, что задокументировано для данной функции может быть изменено в будущих релизах РНР без предупреждения. Вы можете использовать эту функцию только на свой страх и риск.

swfbutton->setup() это псевдоним addShape(shape, SWFBUTTON_UP).

См. также swfbutton->addshape() и SWFAction() .

SWFButton::setUp

(PHP 5 SWFButton::setUp — Alias for addShape(shape, SWFBUTTON_UP)

Описание

Эта функция является ЭКСПЕРИМЕНТАЛЬНОЙ. Поведение этой функции, ее имя и относящаяся к ней документация могут измениться в последующих версиях PHP без уведомления. Используйте эту функцию на свой страх и риск.

swfbutton::setup() alias for addShape(shape, SWFBUTTON_UP).

Возвращаемые значения

Эта функция не возвращает значения после выполнения.

Что такое код swfbutton >setup

Данная тема является продолжением статьи //4pda.ru/2014/12/12/190359/
Здесь обсуждаем способ создания нативной поддержки для устройств ввода и делимся готовыми решениями.

1. Создание файла с VID и PID
Подключаем наше устройство ввода и запускаем приложение USB Device Info. Нас интересует вкладка Linux, в которой выбираем своё устройство (у меня оно было последним в списке) и ищем значения строчек Vendor ID и Product ID. В моём случае это были 0c45 и 7700 соответственно.

Так же VID и PID можно посмотреть подключив устройство к ПК.

Для Bluetooth устройств:
Узнать эти значения для Bluetooth девайсов можно открыв файл /proc/bus/input/devices.

Копируем любой файл из /system/usr/keylayout на sdcard и переименовываем его в соответствии с полученными данными, для моего джойстика название получилось таким: Vendor_0c45_Product_7700.kl. (Обратите внимание, что регистр букв имеет значение)

2. Получение кодов кнопок
Запускаем приложение KeyTest и, вооружившись бумагой и карандашом, начинаем поочерёдно нажимать кнопки на устройстве, записывая цифры, высвечивающиеся после scanCode=. Я записывал коды, располагая их на бумаге, как кнопки на геймпаде.

Из программы можно выйти только по кнопке «Домой».

ВНИМАНИЕ!
Если Геймпад видно в первом шаге, но кейтест не реагирует на нажатия, возможно, у вас отсутствует нужный модуль в ядре — скажите «спасибо» автору прошивки.
Но не отчаивайтесь, есть возможное решение Нативная поддержка для устройств ввода (Пост wm-hater #52134473)

3. Маппинг кнопок
Теперь, когда стали известны коды всех клавиш, необходимо прописать их функции. Тут есть два пути:
а) найти среди имеющихся в Android конфигов устройство, максимально приближенное к вашему, и просто изменить в нём коды кнопок, скопировав содержимое в свой файл;
б) прописать все самому.
Я пошёл по второму пути, ибо мой джойстик имеет только крестовину управления и четыре кнопки. Для начала нужно понять синтаксис файла раскладки, он очень прост:

key код_кнопки действие_кнопки

Но тут возник вопрос: а какие действия кнопок писать в конфиге? За много лет использования различных геймпадов на Android я для себя определил, что самый универсальный конфиг — это раскладка от Sony Xperia Play, она одинаково хорошо ведёт себя как в играх, так и в интерфейсе системы.

Ok Google, key mapping for Xperia Play

Нас интересует третья колонка, но запись действий в ней немного отличается от тех, что были найдены в системе — это не помеха, просто убираем KEYCODE_.

Прописываю свои кнопки (помните листок с карандашными записями? Самое время найти его. ):
. ВНИМАНИЕ .
Нужен текстовый редактор с поддержкой unix кодировки!
Блокнот из состава Windows НЕ подойдет ,
Используйте, к примеру, Notepad++

4. Момент истины
Сохраняем наш файл и копируем его в папку /system/usr/keylayout. Выставляем права -rw -r -r (644). Перезагружаем устройство (сам я этого не делал, просто заблокировал и разблокировал, но для чистоты совести и эксперимента обязан был это написать).

Подключаем наше устройство, и если всё сделали правильно, тут же сможете «крестовиной» перемещаться по меню Android. Кнопка, на которую назначили DPAD_CENTER, будет кнопкой выбора, а BUTTON_B — кнопкой «назад».

Q: Все прописываю верно, но конфиг не цепляется.
А: Если вы пропишете коды действий с ошибкой, например:
key 123 BUTTON_HOME вместо key 123 HOME
то система будет считать этот файл ошибочным.
Самый лучший способ проверить подхватывается ваш kl файл системой или нет — стереть все кейкоды или закомментировать их знаком #:
# key 123 BUTTON_HOME
Если файл подхватился — никакой реакции на кнопки не будет, но в KeyTest все будет отображаться.

Q: Все прописываю верно и без ошибок но все или часть кнопок не работают.
А: Попробуйте прописать scancode в hex формате: Нативная поддержка для устройств ввода (Пост romanctest #69194647)
Q: Дуалшок 4 постоянно отваливается или работает с задержкой.
А: Нативная поддержка для устройств ввода (Пост maxmergov #81264882)

Что такое код swfbutton >setup

О работе с кнопками на Ардуино написано очень много. В этой статье я напишу свое видение, как удобно разрабатывать управление микроконтроллера с использованием тактовых кнопок, подключенных к цифровым входам.

Не буду вдаваться в подробности схем подключения кнопок к цифровым (и не только) входам микроконтроллера. В данной статье рассматривается кнопка, подтянутая резистором к плюсу и замыкающая вход на землю. Поэтому состояния нажатой кнопки LOW, а отпущенной HIGH.

Тип кнопки не имеет значения, например может быть таким

Самый простой скетч работы с кнопкой выглядит так

Оператор delay(1000) задает задержку между нажатиями кнопки. Если время нажатия превысит 1000 мс, то происходит автоматическое повторное нажатие кнопки. Такой метод может разве что сгодиться для отладки, но в реальной жизни мало применим, так как delay не дает выполнятся остальным операторам скетча (если только не используются прерывания) и ограничивает минимальное время между нажатиями кнопки.

В следующем скетче попробую запоминать состояния кнопки

Все вроде бы работает, но иногда проскакивает два или более срабатывания. В чем же дело? Дело в дребезге контактов механической кнопки.

Обычное срабатывание кнопки выглядит так. Казалось бы все правильно.

Но иногда срабатывание может выглядеть и так

Особенно это заметно у изношенных или просто некачественных кнопок. Есть разные способы борьбы с этим эффектом, от установки конденсатора на цифровой вывод до целых электрических схем. Но у нас ведь есть целый микроконтроллер! Проанализировав работу кнопок, можно сделать вывод, что нажатие кнопки обычно длится более 150 мс, а дребезг контактов порождает импульсы длительностью 50 мс, ну очень редко чуть больше. Поэтому установив минимальное время между нажатиями кнопки в 50-100мс можно побороть эффект дребезга контактов «программным путем».

Иногда для уменьшения числа кнопок в устройстве применяют короткое и длинное нажатие на кнопку. В этом случае короткое нажатие фиксируется при отпускания кнопки А длинное нажатие при достижении заданного интервала. код получается такой.

Иногда, например в часах для установки времени, применяется режим, когда длинное нажатие кнопки вызывает срабатывание с заданным интервалом. Для реализации этой функции будет такой код.

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

В конструкторе класса указывается цифровой вход кнопки. А также четыре необязательных параметра:

  • Таймаут для игнорирования дребезга контактов (По умолчанию 50 мс )
  • Время длинного нажатия кнопки, мс. Если 0, то длинное нажатие не фиксируется. (По умолчанию отключено)
  • Время удержания кнопки, после которого происходит автонажатие кнопки. Если 0, то не происходит. (По умолчанию отключено)
  • Интервал срабатывания кнопки при автонажатии (По умолчанию 500 мс)

Функция begin() производит инициализацию цифрового входа.

Функция loop() вызывается в основном цикле или по таймеру, но достаточно часто и возвращает следующие значения:

  • SB_NONE — ничего не произошло
  • SB_CLICK — событие срабатывания кнопки
  • SB_AUTO_CLICK — событие автонажатия кнопки при длинном удержании
  • SB_LONG_CLICK — событие длинного нажатия кнопки

Скачать класс для работы с кнопками с примером

Пример работы с данным классом выглядит так:

Как быстро настроить AMP на WordPress

Что такое AMP-страницы?

AMP-страница, это оптимизированная страница, которая ускоренна специально для мобильных устройств. Это HTML страница с открытым исходным кодом, которая оптимизирована для устройств с маленьким экраном, даже если она содержит видео или рекламу.

AMP страницы хранятся в отдельном кеше Google и поэтому у них более высокая скорость загрузки. Google впервые анонсировал Accelerated Mobile Pages – Ускоренные страницы для мобильных устройств в октябре 2015 года.

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

Ограничение для AMP страниц:

  • Только асинхронные скрипты
  • Нельзя описывать стили с помощью «style» по месту применения, все они должны быть описаны в HTML файле в тэге «style amp-custom»
  • Ограничение на размер стилей в 50 КБ
  • Параметры «width» и «height» внешних ресурсов, таких как картинки, должен быть указан внутри html
  • Ограничение на Javascript, можно использовать только поддерживаемую библиотеку AMP JS
  • Шрифты должны быть загружены по ссылке или в CSS-конструкции @font-face

Зачем вам AMP?

Быстрые страницы — счастливые посетители. Счастливые посетители чаще остаются на сайте, читают и взаимодействуют контентом. Google любит такое поведение.

С технической точки зрения AMP страницы, не учитываются как сигнал ранжирования. Тем не менее, Google отдает предпочтения сайтам с хорошими поведенческими факторами, а не сайтам с большим показателем отказов из — за медленной скорости загрузки.

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

Как настроить AMP на WordPress сайте?

Настройка AMP страниц, на много легче, чем многие думают. Следуйте этим инструкциям, чтобы реализовать AMP на вашем WordPress сайте.

Шаг #1: Установите плагин «Accelerated Mobile Pages (AMP) Project»

Это бесплатный плагин AMP от Automattic. Для установки заходим в Плагины > Добавить новый и ищем плагин «Accelerated Mobile Pages (AMP) Project», он поддерживает последнюю версию WordPress 4.6.1.

После того, как вы его активируете, он сразу же создаст AMP страницы на сайте. Что бы проверить, добавьте в конце адреса любой страницы /amp/.

Так же вам не стоит опасаться дублирование контента плагин автоматически добавить в код вашей страницы:

А на AMP страницу добавит:

Шаг #2: Установите плагин Yoast Glue Plugin

Теперь, когда у вас есть AMP страницы, было бы неплохо, если бы они были похожи на остальной ваш сайт, вместо черно-белого стиля по умолчанию.

Плагин Yoast Glue Plugin интегрирует основные SEO мета-данные на страницы AMP и позволяет настраивать их оформление.

После того, как вы установили и активировали плагин, перейдите в Yoast SEO > AMP в панели управления WordPress. В вкладке «Design» вы можете загрузить лого, настроить основные цвета.

Примечание: Yoast Glue Plugin плагин не будет работать, если вы используете другой SEO плагин. Если вы используете другой SEO плагин настоятельно не рекомендуется устанавливать Yoast в качестве дублирующего плагина, это может привести к неправильной работе сайта. Если у вас установлен другой плагин, то придется либо остаться на дефолтном оформлении AMP, либо удалить старый SEO плагин.

На данный момент у вас уже есть две версии страниц. Версия AMP урезанна. На ней нет хидера, расширений социальных сетей, комментариев и меню.

Шаг #3: Добавление AMP страниц в Search Console

После того, как вы реализовали AMP и настроили их, пришло время проверить, что бы Google заметил ваши усилия. Войдите в Google Search Console и нажмите Вид в поиске > Ускоренные мобильные страницы (AMP).
Здесь можно проверить AMP страницы:

  • Количество проиндексированных ускоренных мобильных страниц (AMP)
  • Количество AMP-страниц с ошибками (без предупреждений).

Любые ошибки в AMP будут отображаться в этом отчете. При возникновении ошибок просто нажмите кнопку, чтобы выяснить, что вызывает ошибку. Это может быть скрипт или плагин. Устраните проблему, а затем запустить AMP валидатор, по ссылке:
https://val >

Как отслеживать ускоренные мобильные страницы (AMP)

Стандартный код счетчиков нельзя установить на AMP страницы, на данный момент есть возможность установки счетчика Google Analytics. Вот официальное руководство по настройке на Developers.google и подробный разбор в блоге Netpeak. Metrika не устанавливается на AMP, но скорее всего Yandex скоро внедрит эту возможность.

Вывод

Вот и все, это простое трех шаговое руководство по созданию AMP-страниц на WordPress сайте. Если у вас не WordPress, не волнуйтесь. Есть подробное руководство созданию AMP страниц. Это будет не так просто, как в WordPress, но оно того стоит.)

Остались вопросы? Задавайте!

Что такое код для действия кнопки?

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

Для RaisedButton , какой код необходим для создания действия, когда кнопка создается программно?

btn1.addTarget(self, action: «okButton», forControlEvents: UIControlEvents.TouchUpInside)

приводит к unrecognized selector sent to instance .

В коде удалите развертку необязательного параметра:

Добавьте «:» в конце вашего имени переключателя:

Это должно решить вашу проблему :)

Вам нужно будет дать «okButton:» как действие, поскольку оно принимает аргумент.

Добавьте Google Аналитику на AMP-страницы

AMP (Accelerated Mobile Pages) – платформа, с помощью которой можно создавать веб-страницы для статического контента с ускоренной загрузкой. Действия пользователей на AMP-страницах отслеживаются при помощи элемента , у которого есть встроенная поддержка Google Аналитики.

Как настроить отслеживание просмотров страниц

Чтобы добавить стандартный тег Google Аналитики на свою AMP-страницу, скопируйте фрагмент кода ниже и замените на идентификатор нужного ресурса. О том, как найти свой идентификатор Google Аналитики, читайте в этой статье.

Принцип работы

Элемент – это дополнительный компонент AMP, его можно использовать только как custom-element в коде тега.

AMP не поддерживает JavaScript, за исключением собственных одобренных библиотек. Поэтому конфигурация выполняется с помощью JSON. Свойство gtag_id с действительным добавляется в блок vars , а затем идет ресурс config со значением : <> .

Отслеживание событий

Чтобы отслеживать события на страницах AMP, задайте нужные значения в разделе triggers . В конфигурации триггера используются следующие свойства:

  • selector – CSS-селектор, позволяющий задать целевой элемент;
  • on – тип события;
  • vars – раздел для определения типа события event_name , куда можно также добавить дополнительные параметры.

В примере ниже показано, как настроить простое событие Google Аналитики. Создайте триггер с названием «button«, который будет активироваться при нажатии элемента с идентификатором «the-button«. Этот триггер будет отправлять в Google Аналитику значение event_name , то есть «login«, и значение method , то есть «Google«.

События Google Аналитики используются только в этом сервисе и часто применяются при создании отчетов о кампаниях. Значения для них можно задать в разделе «vars» с помощью параметров event_category , event_label и value .

Дополнительную информацию о настройке триггеров вы можете найти в документации по amp-analytics .

Изменение параметров

Чтобы переопределить параметры Google Аналитики по умолчанию или дополнить код новыми параметрами, добавьте нужные значения в раздел parameter блока config . Следующий пример кода переопределяет значения по умолчанию для page_title и page_location .

Связывание доменов

Вы можете связать несколько сайтов в разных доменах и отслеживать их как один домен. Задать домены для связывания можно с помощью команды «linker»: < "domains": [. ] >:

Возможность установления связи с вашим каноническим доменом из кеша AMP включена по умолчанию, если на AMP-страницах настроена поддержка Google Аналитики. Чтобы отключить ее, добавьте «linker»: «false» в параметры конфигурации:

Скорость загрузки сайта

Google Аналитика автоматически собирает данные о скорости загрузки, анализируя лишь небольшую часть трафика вашего сайта. Измените частоту выборки, если вы хотите собирать больше данных (или меньше). Чтобы задать частоте выборки значение 100%, добавьте в свою конфигурацию следующий код:

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

Трафик на страницах AMP и обычных веб-страницах

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

Используя отдельный ресурс для AMP, вы сможете получать более точные данные о трафике на этих страницах. Если вы работаете с одним ресурсом, обозначьте тип страниц параметром ds или иным специальным параметром.

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

Отладка конфигурации

Узнать, соответствует ли веб-страница спецификации AMP HTML, поможет инструмент AMP Validator. Чтобы включить его, добавьте в URL страницы компонент #development=1 .

Провести отладку конфигурации и устранить неполадки поможет расширение amp-analytics , которое выводит предупреждения и сообщения об ошибках. Чтобы включить расширение и просмотреть информацию на панели браузера, добавьте в URL страницы компонент #log=1 .

Полный пример

Это пример целой AMP-страницы с одной кнопкой. Конфигурация будет отправлять в Google Аналитику стандартные данные о просмотре страницы и событиях «button-click«.

Статьи по теме

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

SWFbutton->setUp

SWFbutton->setUp — псевдоним addShape(shape, SWFBUTTON_UP).

Описание

void swfbutton->setup (ressource shape)

Предупреждение!

Эта функция — ЭКСПЕРИМЕНТАЛЬНАЯ. Поведение, имя и всё остальное, что задокументировано для данной функции может быть изменено в будущих релизах РНР без предупреждения. Вы можете использовать эту функцию только на свой страх и риск.

swfbutton->setup() это псевдоним addShape(shape, SWFBUTTON_UP).

См. также swfbutton->addshape() и SWFAction() .

Как сделать FF удобней — пишем свои кнопки

Преамбула

Я перешел на FF с IE очень давно — мне нужен был браузер с удобными средствами разработки и отладки, позволяющий полностью настраиваться «под себя» так как это был мой основной рабочий инструмент — инструмент должен быть удобным.

И FF полностью справился со своими обязанностями — возможно, я кому-то покажусь странным — но я потратил около 2-х месяцев на чтение сайта с дополнениями и нахождения для меня лучшего их набора, настройки и т.д.
В результате я получил мощную хорошо настроенную и удобную программу для своих нужд.

Не смотря на то, что я знаю JS, мне ни разу не пришло в голову писать какие-либо расширения под ff по одной простой причине — чтобы я не захотел — это уже было в депозитории расширений. Так продолжалось до вчера :)

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

Можно использовать избранное… но как-то много у меня там всякого не относящегося к работе… папки там — тоже вариант — но вот не нравится мне оно как-то.

Поиски.

И я стал искать как можно это все сделать красиво и удобно.
Для начала перерыв сайт с расширениями ничего конкретно подходящего я не обнаружил и был в несколько шоковом состоянии x_X, но по скольку борцы на просторах всемирной паутины никогда не унывают, несколько удивившись я понял что момент создания своего расширения под ff наконец-то настал, но как всегда подвел двигатель прогресса — а именно лень.

Было абсолютно не охота разбираться с тем как его упаковывать как устанавливать и писать локализации к нему — однако выход нашелся быстро — есть такое замечательное расширение, которое наверняка стоит у многих программеров Custom Buttons, есть еще более навороченный вариант Custom Buttons 2 — кому что нравится, я же выбрал первый, так как руководствуюсь принципом если несколько сущностей одинаково удовлетворяют ваши потребности — используйте простейшую — ну да это я — а Вы можете выбрать исходя из своих принципов :)

Далее все просто — данные расширения — это некоторая обвязка, позволяющая создавать свои собственные кнопки на тулбаре и реализовывать в них собственный функционал. Он пишется на JS, расширенном внутренними объектами FF.

Т.е. особо пытливым хабралюдям все-таки придется лезть и читать документацию :)

Алгоритм добавления кнопки прост: правый клик по тулбару -> добавить кнопку, позднее после заполнения всех нужных полей и сохранения кнопки надо будет еще вытащить ее в нужное место на нужный тулбар, используя правый клик по тулбару -> настроить, а дальше найдя свою кнопку перетащить ее в нужное место.

Что касается полей:
Имя — имя вашей кнопки
Картинка — путь до картинки, которая и будет кнопкой ( вы можете указав путь нажать base64 — тогда за место пути до картинки у вас образуется dataURL, и картинка будет хранится в самой кнопке )

Далее вкладки
Код — тот код, что выполняется по нажатию
Инициализация — код, выполняемый один раз при загрузке браузера

Соотвественно вся мощь FF у вас в руках, делать можно все что хочешь :)
Например для того, чтобы сделать отдельную кнопку для вызова избранного достаточно добавить вот такое:
Код:

if ( ! this .lastChild ) <
var mc = document .getElementBy >»bookmarksMenuPopup» );
var mcc = mc.cloneNode( true );
this .appendChild( mcc );
>

var bo = document .getBoxObjectFor( this );
this .lastChild.showPopup ( this , -1, -1, «popup» , «bottomleft» , «topleft» );

* This source code was highlighted with Source Code Highlighter .

Инициализация:
пусто
Здесь я обошелся без отдельного кода инициализации, засунув его и проверку в основной код.
Естественно можно разделить это как должно быть правильно — переписав все содержимое первого if в код инициализации и убрав if из кода, но зато так кароче :)

Собственно щелкнув по правой клавишей по нашей кнопке мы получим меню Custom Buttons с помощью которого можно редактировать код кнопки, копировать код кнопки — вобщем работать и изменять наше маленькое расширение, левый же клик откроет нам избранное, выполнив наш код.

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

Вот оно!

Возвращаясь к своей персональной задачке и пока я писал для нее код, у меня родился еще небольшой функционал:

  1. возможность открыть определенный URL
  2. хотелось иметь возможность быстро запускать нужные приложения ( например хранитель паролей )
  3. удобно было бы иметь возможность запускать некий стандартный код JS на любой странице ( конечно можно поглядеть в FireBug-е, но всеже иногда удобней кликнуть два раза чем бегать по его закладкам )
  4. ну и некое подобие roboform, только с более простым функционалом — а именно — открыть нужный URL и заполнить определнные поля определнными значениями

п.3 — использую например чтобы поглядеть список iframe-ов или timer-ов на странице и много еще для чего. Очень часто мне такое бывает нужно.

п.4 — Например при отладке страниц с формами — можно конечно заполнить форму сохранить и юзать — но как-то не срослась у меня дружба с форм-филлерами для FF :) кроме того — закончил проект — все просто — удалил запись и мусора нет — все поля хранятся в самой записи. Можно тоже поспорить о целесообразности, но опять-же для меня это было бы удобно.

Почитав доки и подглядев в установленных расширения куски кода родилась вот такая штука ( над оптимизацией кода не работал — ибо не до того было — с удовольствием приму замечания :) ):
Код:
var bo = document.getBoxObjectFor( this );
this.lastChild.showPopup ( this, -1, -1, «popup», «bottomleft», «topleft» );

var mitems = [
<
«label» : «localhost» ,
«tip» : «localhost» ,
«image» : «» ,
«type» : «url» ,
«val» : «localhost»
>,

«separator» ,
<
«label» : «Google» ,
«tip» : «Google» ,
«image» : «» ,
«type» : «url» ,
«val» : «http://www.google.ru»
>,
«separator» ,

<
«label» : «Notepad» ,
«tip» : «Notepad» ,
«image» : «» ,
«type» : «exec» ,
«val» : «c:/windows/notepad.exe»
>,

<
«label» : «other» ,
«tip» : «other» ,
«image» : «» ,
«type» : «submenu» ,
«val» :
[
<
«label» : «JS test» ,
«tip» : «JS test» ,
«image» : «» ,
«type» : «js» ,
«val» : «alert( ‘js testing. ‘ );»
>,

<
«label» : «Выход из FF» ,
«tip» : «Выход из FF» ,
«image» : «» ,
«type» : «js» ,
«val» : «goQuitApplication();»
>
]
>
];

function createMenu( label, tip, image ) <
var m = document .createElement( «menu» );
m.setAttribute( «label» , label );
if ( image ) <
m.setAttribute( «class» , «menu-iconic» );
m.setAttribute( «image» , image );
>
if ( tip ) m.tooltipText = tip;

function createMenuItem( label, tip, image ) <
var mi = document .createElement( «menuitem» );
mi.setAttribute( «label» , label );
if ( image ) <
mi.setAttribute( «class» , «menuitem-iconic» ); // «menuitem-iconic bookmark-item»
mi.setAttribute( «image» , image );
>
if ( tip ) mi.tooltipText = tip;

function executeFile( progPath, arg ) <
progPath = progPath.replace( /\ //gi, «\\» );
try <
var argArray = arg ? arg.split(/\s+/) : [];
var nsILocalFile = Components. >»@mozilla.org/file/local;1″ ].getService(Components.interfaces.nsILocalFile);
var nsIProcess = Components. >»@mozilla.org/process/util;1″ ].getService(Components.interfaces.nsIProcess);
nsILocalFile.initWithPath(progPath);
nsIProcess.init(nsILocalFile);
nsIProcess.run( false , argArray, argArray.length);
// nsIProcess.close();
return nsILocalFile;
>
catch ( ex ) <
alert( ex.toString() );
return null ;
>
>

function buildMenu( items ) <
var menu, i, t, mi, item;
var self = this ;

menu = document .createElement( «menupopup» );
menu.type = «menu» ;
menu.orient = «horizontal» ;
// menu. ;

for ( i in items ) <
item = items[i];
if ( typeof ( item ) == «string» ) <
switch ( item ) <
case «separator» :
mi = document .createElement( «menuseparator» );
break ;

default :
mi = null ;
break ;
>
>
else <
switch ( item.type ) <
case «url» :
mi = createMenuItem( item.label, item.tip, item.image );
mi.onclick = function () <
var b = getBrowser();
b.selectedTab = b.addTab( this .onclick.addr );
b.selectedTab.onload = function () <>
>;
mi.onclick.addr = item.val;
break ;

case «urlForm» :
mi = createMenuItem( item.label, item.tip, item.image );
mi.onclick = function () <
var item = this .onclick.item;
var b = getBrowser();
var tab = gBrowser.addTab( item.val.addr );
var newTabBrowser = b.getBrowserForTab( tab );
b.selectedTab = tab;
var lf = function ( event ) <
var fields = item.val.fields;
newTabBrowser.removeEventListener( ‘load’ , lf, true );
setTimeout(
function () <
var doc = newTabBrowser.contentDocument;
var inputs = doc.getElementsByTagName( «input» );
for ( var i in fields ) <
for ( var j = 0; j if ( inputs[j].name == i ) inputs[j].value = fields[i];
>
>,
100
);
>;
newTabBrowser.addEventListener( «load» , lf, true );
>;
mi.onclick.item = item;
break ;

case «js» :
mi = createMenuItem( item.label, item.tip, item.image );
mi.onclick = new Function( item.val );
break ;

case «submenu» :
mi = createMenu( item.label, item.tip, item.image );
mi.appendChild( buildMenu( item.val ) );
break ;

case «exec» :
mi = createMenuItem( item.label, item.tip, item.image );
mi.onclick = new Function( «this.onclick.executeFile(‘» + item.val + «‘)» );
mi.onclick.executeFile = executeFile;
break ;

if ( mi ) menu.appendChild( mi );
>

this .appendChild( buildMenu( mitems, false ) );

* This source code was highlighted with Source Code Highlighter .

mitems собственно массив наших пунктов меню и самих меню
задатеся JS объектами, поля:

  • label — название пункта меню
  • tip — всплывающая подсказка на пункте ( может быть пустое )
  • image — либо адрес либо dataURL для картинки ( может быть пустое )
  • type — тип пункта:
    • url — открыть страничку, в поле val — адрес странички
    • urlForm — открыть страничку и заполнить нужные поля нужными значениями, поле val:

    <
    «addr» : «адрес страницы» ,
    «fields» : <
    «поле1» : «значение поля1» ,
    «поле2» : «значение поля2» ,
    и т.д.
    >
    >

    * This source code was highlighted with Source Code Highlighter .

  • js — запустить JS код, в поле val — JS код
  • exec — запустить приложение, в поле val — полный путь до приложение и его имя — типа «c:/a/b/c.exe», слэши используются обратные
  • submenu — создать подменю, в поле val — массив из наших пунктов-объектов

  • val — зависит от type
  • Ну вот собственно наше расширение и готово, не буду говорить за всех — а мне стало удобней.
    И, я надеюсь, пусть на чуток я увеличу количество пользователей такого замечательного браузера ( а может быть чего доброго — и количество разработчиков расширений под него :) )

    Очень надеюсь, что моя статья кому-нибудь окажется полезной…

    SWFbutton->setUp

    SWFbutton->setUp — псевдоним addShape(shape, SWFBUTTON_UP).

    Описание

    void swfbutton->setup (ressource shape)

    Предупреждение!

    Эта функция — ЭКСПЕРИМЕНТАЛЬНАЯ. Поведение, имя и всё остальное, что задокументировано для данной функции может быть изменено в будущих релизах РНР без предупреждения. Вы можете использовать эту функцию только на свой страх и риск.

    swfbutton->setup() это псевдоним addShape(shape, SWFBUTTON_UP).

    См. также swfbutton->addshape() и SWFAction() .

    Илон Маск рекомендует:  $Optimization - Директива компилятора Delphi
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL
    Предупреждение!